Javascript For循环中的setTimeout问题

Javascript For循环中的setTimeout问题,javascript,jquery,css,Javascript,Jquery,Css,我有一个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');

我有一个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);

};
为了简单起见,我没有在这里粘贴代码,所以有时候会有几个元素需要删除

但是,在这种情况下,循环运行此代码一次,设置超时,然后立即重新运行代码。因此,在超时触发的时间点,目标变量已经更改。如何修复此问题?

目标是通过循环围绕函数关闭,而不是循环本身

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

};

你只是想让动画排队,如果是的话,使用200*i作为超时?这可能会有帮助。另一个相关问题:是的,for循环中没有特殊的作用域,因此每次都会覆盖变量目标。当您使用jQuery时,只需使用$。每个都是简单的修复方法。在问这个问题之前,我没有进行正确的搜索。看起来,前几个结果不是我想要的结果,所以我问了这个问题,感谢您提及其他问题!