Javascript の副作用であると思われる、特に興味深いケースに遭遇しました。
私は、スコープと、関数が第一級市民であるという事実に頭を悩ませようとしています。私が正しい軌道に乗っているかどうかを教えてください。これが初心者の質問である場合はご容赦ください。
次のコードを参照してください。
let mrGlobal = "mrGlobal";
let drSideEffect = function() {
mrGlobal = "mrGlobal has been acting weird lately";
}
function main(firstClassFunction) {
let mrGlobal = "mrGlobal: version 2.";
firstClassFunction
console.log(mrGlobal) //First console.log
}
main(drSideEffect());
console.log(mrGlobal) //Second console.log
最初の consol.log の場合、出力は次のとおりです: mrGlobal バージョン 2.
2 番目の consol.log の場合、出力は次のとおりです。
私は当初、これが opppsite の動作 (最初の console.log が 2 番目の console.log に切り替わる) になると思っていたので、この出力には驚きました。これは、javascript の関数が宣言されているスコープにバインドされており、それらを実行するスコープにバインドされていないためだと思います-たとえそれらがファーストクラスの市民としてそのスコープに渡されたとしても?