4

setTimeout関数を使用してループを作成しましたが、2番目または3番目のステップの後で、一度に2回実行を開始するため、それ自体を呼び出すと問題が発生します。これは私の関数がどのように見えるかです:

var value = 70, 
    intervalID = null;

function interval() {
  intervalID = setTimeout(countDown, 1000);
}

function countDown() {
  value--;
  if(value > 0) {
    clearTimeout(intervalID);
    interval();
  } else {
    endInterval();
  }
}

function endInterval() {
  // do something
}

変数値をその69、68にコンソールすると、その後、1回の関数呼び出しで変数値が2回減少し始めます。私は関数countDown()をどこからでも呼び出していませんが、1か所から呼び出しています。

Javascript間隔 何が問題なのですか?

編集:このコードは現在機能しています。

4

1 に答える 1

5

前のタイムアウトを停止して、タイムアウトを「サニタイズ」することをお勧めします。

function interval() {
  clearTimeout(intervalID);
  intervalID = setTimeout(countDown, 1000);
}

しかし、それは病気の原因ではなく、症状のコントロールのように見えます. したがって、問題の原因を検出することをお勧めします。

于 2012-08-29T11:17:25.593 に答える