1

iこのループは関数内にあり、10からカウントダウンしますが、関数で使用して渡されたパラメーターにアラートを送信するsetVと、実際にカウントアップします。

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


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

3 に答える 3

4

すべてのsetVは同時に実行するようにプログラムされており(瞬時ループ実行の100ms後)、順序は決定されません(仕様を参照)。

あなたはおそらく欲しかった

for (var i=10;i>0;i--){
   setTimeout('setV('+i+',"Out")',100*(11-i));
}
于 2012-11-23T17:37:47.300 に答える
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 に答える
0

動作を次のように説明している場合:

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

カウントアップする理由は、1秒のコールバックセットが2秒の1セットよりも早く実行され、3秒の1セットよりも早く実行されるためです。

于 2012-11-23T17:36:05.700 に答える