1

嗨,想问一下为什么这段代码返回一个函数而不是 x 值。提前致谢。

function f() {
  function makeClosure(x) {

    return function(){
      return x;
    };
  }
  var a = [];
  var i;
  for(i = 0; i < 3; i++) {
    a[i] = makeClosure(i);
  }
  return a;
}
var a = f();
console.log(a[0]);
4

3 回答 3

3

makeClosure正在返回函数,因此您的数组a中充满了函数。

a[0]将返回函数,a[0]()将返回 x

于 2013-10-22T03:11:16.313 回答
1

如果您看一下,makeClosure您会发现它返回一个函数,该函数又返回x

在循环内,将数组中a[i] = makeClosure(i);返回的函数分配到索引处。makeClosure(i)i

在数组中的特定索引处运行函数将返回相关x值。

a[0]();应该返回0

于 2013-10-22T03:12:14.920 回答
1

函数f()返回一个数组

所以var a=f()a.

现在每个数组元素本身就是一个函数。因此,如果您访问数组中的任何数组元素,a它只会访问函数定义不会执行它

因此,要执行函数,您需要将数组元素作为函数调用,即代替a[0]inconsole.log(a[0]);您需要使用console.log(a[0]());

这是唯一的原因...

于 2013-10-22T03:28:49.707 回答