我按照互联网上的一个例子,尝试改变其中一些
我认为应该给我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
答案 0 :(得分:2)
因为tmp
是您从foo
返回的函数的本地变量 - 这意味着当您第二次调用foo
时,它会重置为3. 3 +( 3 + 1)+ 10 = 17。
答案 1 :(得分:0)
结果17是正确的。
每次调用foo
都会生成一个新函数,其中包含新已结束变量tmp
。
也许您认为对foo
的第二次通话使用与第一次通话中相同的tmp
?它没有。这就是为什么你得到17:3 + 10 + 4。
答案 2 :(得分:0)