javascript关闭中的新手
我遵循互联网上的示例,并尝试对其进行一些更改
我认为它应该给我16,17,18,19
但结果出乎意料
这是我的代码。
我不知道为什么我首先打电话给bar2(10),它发出警报17,它应该给我18吗?
function foo(x) {
var tmp = 3;
return function (y) {
alert(x + y + (++tmp));
}
}
var bar = foo(2);
bar(10);//alert16
bar(10);//alert17
var bar2 = foo(3);
bar2(10);//alert17
bar2(10);//alert18
最佳答案
结果17是正确的。
每次调用foo
都会产生一个带有新封闭变量tmp
的新函数。
也许您认为第二个呼叫foo
使用的是与第一次呼叫相同的tmp
?没有。这就是为什么您得到17:3 + 10 + 4。