1

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
4

3 回答 3

2

因为tmp它是您返回的函数的局部变量foo——这意味着当您foo第二次调用时,它会重置为 3. 3 + (3+1) + 10 = 17。

于 2013-07-30T02:35:08.487 回答
0

结果 17 是正确的。

每次调用都会foo产生一个带有封闭变量的函数。tmp

也许您认为第二次调用与第一次调用foo使用相同tmp?它没有。这就是为什么你得到 17:3 + 10 + 4。

于 2013-07-30T02:35:23.340 回答
0
  1. bar(y) = n = x + y + tmp
  2. 酒吧(10)= 16 = 2 + 10 + 4
  3. 酒吧(10) = 17 = 2 + 10 + 5
  4. bar2(10) = 17 = 3 + 10 + 4
  5. bar2(10) = 18 = 3 + 10 + 5
于 2013-07-30T02:38:09.560 回答