For循环中的setTimeout问题

Issues with setTimeout within For Loops

本文关键字:setTimeout 问题 循环 For      更新时间:2023-09-26

我有一个for循环,循环通过数组的元素,构造一个jQuery目标,应用一个类,然后删除它。

remove触发css3 @keyframes动画,耗时0.2秒。然后继续实际删除DOM元素。这在理论上可行。

for (var i = playerBuffs.length - 1; i >= 0; i--) {
    var target = '#bufflist-' + playerBuffs[i][5];
    $(target).addClass('remove');
    setTimeout(function(){$(target).remove();},200);
};

有一些条件必须为真才能删除元素(为了简单起见,我没有将代码粘贴在这里),所以有时会有多个元素需要删除。

但是,在这种情况下,循环运行此代码一次,设置超时,然后立即重新运行代码。所以在timeout触发的时间点上,target变量已经改变了。我怎么解决这个问题?

target被封闭在带有循环的函数周围,而不是循环本身。

for (var i = playerBuffs.length - 1; i >= 0; i--) {
    var target = '#bufflist-' + playerBuffs[i][5];
    (function(target) {
       $(target).addClass('remove');
       setTimeout(function(){$(target).remove();},200);
    })(target);
};