0

シンプルなストップウォッチの次のコードがあります。これは、書式設定を一切行わずに秒数のみをカウントします。

function countDown(from, interval, callback) {
   interval = interval || 1000;
   var current = 0;
   var onCount = function() {
      current++;
      if (current <= from) {
         callback(current, from);
         setInterval(onCount, interval);
      }
   }

   onCount();
}

これは、次のコードを使用して onclick で呼び出されます。

countDown(600, 1000, function(current, from) {
   time_out.innerHTML = current;
});

console.log(current) を入力すると、2 つの問題が確認できます。まず、すべての数値を通過しますが、2 のべき乗でどんどん速くなっていくようです。出力 div では、最初のティックは 1、2 番目は 2、3 番目は 4、4 番目は 8 などになります。さらに、div の更新を停止しても、実際には 600 に達してもカウントを停止しません。ここで何が間違っていましたか?

4

1 に答える 1

2

関数が呼び出されるたびに設定された間隔でコールバックを呼び出す which を使用setIntervalすると、多くの呼び出しが発生します。countDown()

代わりに、遅延後に関数を 1 回だけ呼び出すsetTimeout関数を使用したい場合があります。

于 2012-11-08T06:19:36.093 に答える