我遇到了一个特别有趣的案例,我认为这是 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 version 2。
在第二个 consol.log 的情况下,输出是:mrGlobal 最近表现得很奇怪
我最初认为这会导致 opppsite 行为(第一个 console.log 与第二个 console.log 切换)所以这个输出让我感到惊讶。我假设这是因为 javascript 中的函数绑定到声明它们的范围而不是执行它们的范围 - 即使它们作为一等公民传递到该范围?