如何给回调函数一个值一个变量在特定时刻

How to give a callback function a value a variable has at a specific moment

本文关键字:一个 定时 时刻 变量 回调 函数      更新时间:2023-09-26

我有问题,有一个回调函数,我想传递另一个变量。但是当回调函数执行时,变量发生了变化。我该如何解决这个问题?

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"]);
    });
}

这就是我所说的函数。如果有人能帮我,我会很高兴的。

匿名函数使用在循环中更改的上下文。这是一个常见的"问题",有几个"修复":

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() ' ?)

您可以简单地将它放入闭包中:

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);
}