这里是代码:JavaScript的关闭和范围
function fn() {
var x = 1;
function fn2() {
x++;
console.log(x);
}
return fn2;
}
var foo = fn();
var bar = fn();
foo(); //2
bar(); //2
foo(); //3
我得到了我想不通,为什么结果是不是2 3 4。我的意思是一个问题,根据关闭原则,foo和bar应该保持函数的范围,所以我认为foo和bar具有相同的x。希望你能帮我解决问题。
我很困惑。这里应该提到的是什么?它将在严格模式下为undefined,否则为窗口对象。这与声明全局'x'变量相同。另外,我想你的意思是“每次fn()'都被**调用**,而不是”赋值“ –
'this.x'会使'x'全局,就好像'x'被定义在' fn'(全球),所以我们不再谈论关闭了, –
是的,我正在修补,意识到你是绝对正确的。 – Snowmonkey