为什么函数f中的返回值返回显示函数而不是x值

时间:2013-10-22 03:06:14

标签: javascript

你想知道为什么这段代码会返回一个函数,而不是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]);

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

如果查看makeClosure,您会看到它返回的函数反过来返回x

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

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

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

答案 2 :(得分:1)

功能f()会返回数组

因此var a=f()a中分配一个数组。

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

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

这是唯一的原因......