Javascript:对于vs jQuery.each()有时间延迟

图1

for (var i = Things.length - 1; i >= 0; i--) { setTimeout(function(){ // do something with Things[i] }, 200 * i); }; 

图2

 $(".things").each(function(i,o){ setTimeout(function(){ //do something with o }, 200 * i); }); 

为什么图2工作但图1没有? 每次我尝试第一种方法时, i总是等于-1 。 是什么赋予了?

 for (var i = Things.length - 1; i >= 0; i--) { (function(i){ setTimeout(function(){ // do something with Things[i] }, 200 * i); })(i) }; 

您需要为i创建一个范围,因此它保持其值。 否则它会通过循环更新。

它适用于图2的原因( $.each(function(i,o){...}) )是因为这里的匿名函数为i创建了一个闭包。

@ahren回答没问题。 没有IIF,我得到了类似的东西,这对某些人来说可能更简单……

 function loop(i) { // do something with Things[i] if(--i>=0) { setTimeout(loop, 200*i, i); } } setTimeout(loop, 200*Things.length, Things.length);