我真的很难理解闭包。我只是编写了一个小函数来尝试在数组索引中存储多个函数,但是当我打印它们时它们是未定义的。
这是我的代码:
function x() {
var arr = [];
for(var i = 0; i < 5; i++) {
arr.push( (function(index) { console.log(index) } )(i) );
}
return arr;
}
var z = new x();
for (var j = 0; j < 5; j++) {
console.log(z[j]); // Reads Undefined?
}
据我所知,我正在使用IIFE并传入“我”。并将其用作索引&#39;这应该让我了解已知的封闭范围问题,即不断打印出最后一个索引。但是为什么我的数组索引未定义而没有打印出&#39; i&#39;?
帮助将不胜感激。感谢。
答案 0 :(得分:3)
您不会从IIFE返回任何内容,因此会隐式返回附加到数组中的undefined
。如果您想存储index
的值,则需要将其返回:
arr.push( (function(index) { console.log(index); return index; } )(i) );