循环闭包问题中的函数

时间:2018-01-02 23:03:20

标签: javascript closures

我真的很难理解闭包。我只是编写了一个小函数来尝试在数组索引中存储多个函数,但是当我打印它们时它们是未定义的。

这是我的代码:

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;?

帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

您不会从IIFE返回任何内容,因此会隐式返回附加到数组中的undefined。如果您想存储index的值,则需要将其返回:

arr.push( (function(index) { console.log(index); return index; } )(i) );