图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
。是什么给了什么?
答案 0 :(得分:8)
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
创建一个闭包。
答案 1 :(得分:1)
@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);