y的值分配方式

时间:2012-05-20 16:01:45

标签: javascript

我正在看这个函数

function foo(x) {
  var tmp = 3;
  return function (y) {
    alert(x + y + (++tmp));
  }
}
var bar = foo(2); // bar is now a closure.
bar(10);

当我运行它时,变量得到以下值

x = 2, y = 10 tmp = 3。

现在我看到在foo(2)中x被传递为2.因此可以理解x的值是2.然后bar(10)将值0赋给y。怎么样?我很困惑接收函数如何知道10是由bar(10)分配的y的值

2 个答案:

答案 0 :(得分:2)

foo(2)返回一个匿名函数,该函数接受一个参数(y)。当您将bar设置为foo(2)的返回值时,bar将成为对该匿名函数的引用。

因此,当您致电bar(10)时,您正在调用匿名函数foo返回,因此10被设置为参数y

答案 1 :(得分:2)

这是一个闭包

当你写:

var bar = foo(2);

它实际上是调用 foo,因此最终结果是:

var bar = function (y) {
    alert(2 + y + (++tmp));
}

其中tmp是闭包在范围内的值。

所以,随后打电话:

bar(10);

10传递给 函数,结果为:

alert(2 + 10 + (++tmp));
每次调用使用tmp

创建的任何函数时,

foo都会增加