比如说我有以下代码:
for(var i=0; i < itemlist.length; i++){
var item = itemlist[i];
var id = item.id;
$http.get(id + '.json').success(function(data){
//do something with data.
console.log(item.name);
}
}
控制台中显示的名称将是重复值(我认为数组项目列表中的第一个值),即回调函数不知道变量项。
根据我的理解水平,这是奇怪的。有没有办法将额外的变量传递给这个回调函数 - 和/或 - 有人可以告诉我为什么这个变量的范围以这种方式运行?
答案 0 :(得分:2)
假设itemlist是一个数组,您可以使用angular.forEach()之类的
angular.forEach (itemlist, function (item, i) {
var id = item.id;
$http.get(id + '.json').success(function (data) {
//do something with data.
console.log(item.name);
})
})
我在评论中指出的问题是在循环中错误地使用闭包变量。
如果您想要support only IE9+,那么您甚至可以使用Array.forEach()
itemlist.forEach (function (item, i) {
var id = item.id;
$http.get(id + '.json').success(function (data) {
//do something with data.
console.log(item.name);
})
})
答案 1 :(得分:0)
要将值与回调函数相关联,您应该使用bind。 这样,您可以将任何对象附加到回调并通过this.object访问它:
function yourFunction() {
for(var i=0; i < itemlist.length; i++){
var item = itemlist[i];
var id = item.id;
var onSuccess = onSuccess.bind({item: item});
$http.get(id + '.json').success(onSuccess);
}
function onSuccess(data) {
console.log(this.item.name);
}