Javascript 循环中的jquery动画返回相同的索引

Javascript 循环中的jquery动画返回相同的索引,javascript,jquery,loops,Javascript,Jquery,Loops,我这里有一个循环中的动画问题。输出是我想应该的,但不是我想要的 for (var i = 0; i < slots.length; i++) { $('#slot-'+i).animate({ marginTop: -10 }, 200, function() { console.debug(i); if (i == 0) somefunction(); }); } for(变量i=0;i

我这里有一个循环中的动画问题。输出是我想应该的,但不是我想要的

for (var i = 0; i < slots.length; i++) {
  $('#slot-'+i).animate({
    marginTop: -10
  }, 200, function() {
    console.debug(i);
    if (i == 0) somefunction();
  });
}
for(变量i=0;i
问题是console.debug(i)每次都输出for循环的最后一个索引

我想实现的是:在动画的完整函数中,我想调用一个函数,但只调用一次

for(变量i=0;ifor (var i = 0; i < slots.length; i++) {
    $('#slot-' + i).animate({
        marginTop: -10
    }, 200, (function(count) {
        return function() {
            console.debug(count);
            if (count == 0) somefunction();
        };
    })(i));
}
$(“#插槽-”+i)。设置动画({ 玛金托普:-10 },200,(函数(计数){ 返回函数(){ 调试(计数); 如果(count==0)somefunction(); }; })(i) ); } 这里的问题是,除非您使用一个立即调用的函数表达式,为每个迭代返回相应的成功处理程序,否则您的所有处理程序都将引用相同的i值。

(var i=0;i
这里的问题是,除非您使用一个立即调用的函数表达式,为每次迭代返回相应的成功处理程序,否则所有处理程序都将引用相同的i值。

请尝试以下操作:

var i = 0;
for (i=0; i < slots.length; i++) {
$('#slot-'+i).animate({
    marginTop: -10
  }, 200, function() {
    console.debug(i);
    if (i == 0) somefunction();
  });
}
var i=0;
对于(i=0;i
试试这个:

var i = 0;
for (i=0; i < slots.length; i++) {
$('#slot-'+i).animate({
    marginTop: -10
  }, 200, function() {
    console.debug(i);
    if (i == 0) somefunction();
  });
}
var i=0;
对于(i=0;i
您的方法有什么不同吗?是的,他先设置了var。。。我试过了,但失败了:(上面的答案有效我认为在这种情况下,
var i
应该是全局的,然后它就可以工作了,在我的答案中,它就像全局的var,所以应该可以工作。你的方法有什么不同吗?是的,他先设置了var……我试过了,但失败了:(以上答案有效我认为在这种情况下,
var i
应该是全局的,然后它就可以工作,在我的回答中,它就像全局的var一样,所以应该可以工作。这是一个很好的答案,但是如果你解释为什么这对所有人都有效,它会很有用。仅仅转储更正后的代码对未来的用户不太有用。是的,这个答案很好..它可以工作。neveRmin我想这很难描述,但我记住了这个方法。@Jamiec我已经包括了一个解释,但在最近的一次对话中,我发现我对范围的理解有点缺陷。如果你有深入的解释或发现我的解释有任何错误,请在这里发布一个答案或评论。这是一个好答案,但它的用途不同如果你能解释为什么这样做对所有人都有利,那就太好了。仅仅转储更正后的代码对未来的用户不太有用。是的,这个答案很好。它很有效。尽管我想这很难描述,但我记住了这个方法。@Jamiec我已经包括了一个解释,但在最近的一次对话中,我发现我对范围的理解有些模糊wed.如果您有深入的解释或发现我的解释有任何错误,请在这里发布答案或评论。