Javascript setTimeout参数从循环中反转

时间:2012-11-23 17:34:39

标签: javascript

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

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


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

3 个答案:

答案 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