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