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。

09-27 04:53