迭代对象中的JavaScript数组

时间:2015-11-13 11:38:23

标签: javascript

为什么以下所有值都返回为未定义?

for (var i = 0; i < object.array.length; i++) {
    $http.get(.....).success(function(...) {
        console.log(object.array[i]);    //returns undefined for each
    });
}

如果我这样做:

console.log(object.array[0]);

它在数组中显示正确的值。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您创建了一个捕获变量i的{​​{3}}。最有可能的是,不会立即调用该闭包,而是在HTTP请求完成时将其存储在某个地方并在以后执行。那时,你的循环很久以前就已经完成了,因此表达式i < object.array.length不再适用。但是闭包内的i变量是在for循环内定义的变量。因此,当执行闭包函数内的代码时,i等于object.array.length,这是指向超出数组末尾的一个元素的索引。这就是你得到undefined的原因。

for (var i = 0; i < object.array.length; i++) {
    $http.get(.....).success(function(...) { // here you create closure
        console.log(object.array[i]);    // when this line executes, i is invalid
    });
}