为什么以下所有值都返回为未定义?
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]);
它在数组中显示正确的值。
我错过了什么吗?
答案 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
});
}