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