1. ホーム
  2. javascript

[解決済み] setTimeoutかsetIntervalか?

2022-03-21 04:17:57

質問

私が知る限り、これら2つのjavascriptは同じように動作します。

オプションA

function myTimeoutFunction()
{
    doStuff();
    setTimeout(myTimeoutFunction, 1000);
}

myTimeoutFunction();

オプションB

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

を使うのとでは、何か違いがあるのでしょうか? セットタイムアウト setInterval ?

解決するには?

これらは基本的に同じことをしようとしていますが setInterval の方がより正確です。 setTimeout というアプローチは setTimeout は1000ms待ち、関数を実行した後、再度タイムアウトを設定します。つまり、待ち時間は実際には1000ミリ秒より少し長いのです(関数の実行に長い時間がかかる場合はもっと長い)。

と思われるかもしれませんが setInterval を実行します。 まさに は1000msごとに、重要なのは setInterval JavaScript はマルチスレッド言語ではないので、スクリプトの他の部分が実行されている場合、その部分が終了するまで間隔を空けなければならないからです。

このフィドル を見ると、タイムアウトが遅れていく一方で、間隔はほぼ常にほぼ1コール/秒(これはスクリプトがやろうとしていること)であることがよくわかります。もし上部のspeed変数を20のような小さなものに変えると(つまり、1秒間に50回実行しようとする)、間隔は1秒間に平均50回の反復に全く到達しないことになる。

遅延はほとんどの場合無視できますが、本当に精密なものをプログラミングしている場合は 自動調整タイマ (タイムアウトベースのタイマーで、発生した遅れを常に調整するものです。)