1

这个循环在一个函数中,它从 10 开始倒计时,但是如果我提醒在函数中使用传递的参数isetV它实际上会向上计数!

for (var i=10;i>0;i--){
setTimeout('setV('+i+',"Out")',100);
}


function setV(c,t){
alert(c);
}
4

3 回答 3

4

所有的 setV 都被编程为同时执行(瞬时循环执行后 100 毫秒),顺序不确定(参见规范)。

你可能想要

for (var i=10;i>0;i--){
   setTimeout('setV('+i+',"Out")',100*(11-i));
}
于 2012-11-23T17:37:47.300 回答
0

如果您使用以下方式描述行为:

setTimeout('setV('+i+',"Out")',i*100);

它计数的原因是因为 1s 的回调集将早于 2s 的一组回调执行,而 2s 的回调将早于 3s 的一组回调执行......

于 2012-11-23T17:36:05.700 回答
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
于 2012-11-23T17:45:04.540 回答