我有问题,有一个回调函数,我想传递另一个变量。但是当执行回调函数时,变量已经改变。我该如何解决这个问题?
for (var i = 0; i < data.items.length; i++) {
var item = data.items[i];
p.api.get('items.info', {
itemId: item.id
}, function (response, item.id) {
alert(item.id);
alert(response["tags"][0]["tag"]);
});
}
这就是我正在谈论的功能。如果有人能帮助我,我真的很开心。
答案 0 :(得分:0)
您的匿名函数使用循环中更改的上下文。这是一个常见的问题,有几个修复问题&#39;:
1 .bind()
:
p.api.get('items.info', {
itemId: item.id
}, (function (response) {
// item now comes from `this.item`, not `item`
}).bind({item: item}));
2 IIFE(或者他们现在所称的任何内容):
p.api.get('items.info', {
itemId: item.id
}, (function(item) {
return function (response) {
// item is now in `item` because a new context was created
};
})(item));
两者都有点不可读和不直观。必须有更好的方法,但它们取决于您的应用程序结构。 (也许你可以将上下文传递给.get()`?)
答案 1 :(得分:0)
你可以简单地把我放在一个闭包中:
for (var i = 0; i < data.items.length; i++) {
(function(i) {
var item = data.items[i];
p.api.get('items.info', {
itemId: item.id
}, function (response, item.id) {
alert(item.id);
alert(response["tags"][0]["tag"]);
});
})(i);
}