这个循环在一个函数中,它从10开始倒计时,但是如果我在i
函数中使用setV
警告传递的参数,它实际上会计数!
for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100);
}
function setV(c,t){
alert(c);
}
答案 0 :(得分:1)
所有setV都被编程为在同一时间执行(在执行瞬时循环后100ms),订单未确定(参见the spec)。
你可能想要
for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100*(11-i));
}
答案 1 :(得分:0)
如果您用以下方式描述行为:
setTimeout('setV('+i+',"Out")',i*100);
它计数的原因是因为1s的回调设置将比2s的设置更早执行,这将比3s的设置更早执行...
答案 2 :(得分:0)
如果所有超时都设置为同时运行,则无法保证他们将以何种顺序运行此操作。
这是编写该循环的更好方法:
function initThis() {
var idx = 0;
function doOneIteration() {
window.alert(idx);
idx++;
if (idx <= 10) {
window.setTimeout(doOneIteration);
}
}
doOneIteration(); // Start loop
}
initThis(); // This makes it all happen