这个循环在一个函数中,它从 10 开始倒计时,但是如果我提醒在函数中使用传递的参数i
,setV
它实际上会向上计数!
for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100);
}
function setV(c,t){
alert(c);
}
这个循环在一个函数中,它从 10 开始倒计时,但是如果我提醒在函数中使用传递的参数i
,setV
它实际上会向上计数!
for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100);
}
function setV(c,t){
alert(c);
}
所有的 setV 都被编程为同时执行(瞬时循环执行后 100 毫秒),顺序不确定(参见规范)。
你可能想要
for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100*(11-i));
}
如果您使用以下方式描述行为:
setTimeout('setV('+i+',"Out")',i*100);
它计数的原因是因为 1s 的回调集将早于 2s 的一组回调执行,而 2s 的回调将早于 3s 的一组回调执行......
当所有的超时都设置为同时运行时,没有保证他们会以什么顺序运行。
这是编写该循环的更好方法:
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