再帰的なsetTimeoutとsetIntervalの違いは何ですか? 質問する

再帰的なsetTimeoutとsetIntervalの違いは何ですか? 質問する

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

オプションA:

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

myTimeoutFunction();

オプションB:

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

使用方法に違いはありますか?タイムアウトの設定そして間隔の設定?

ベストアンサー1

これらは本質的に同じことをしようとしますが、このアプローチは、1000 ミリ秒待機し、関数を実行してから別のタイムアウトを設定するため、アプローチsetIntervalよりも正確です。したがって、待機期間は実際には 1000 ミリ秒より少し長くなります (関数の実行に時間がかかる場合は、さらに長くなります)。setTimeoutsetTimeout

は正確にsetInterval1000 ミリ秒ごとに実行されると思われるかもしれませんが、JavaScript はマルチスレッド言語ではないため、遅延も発生することに注意することが重要です。つまり、スクリプトの他の部分が実行されている場合は、その部分が完了するまで間隔を空ける必要があります。setInterval

このフィドルでは、タイムアウトが遅れる一方で、間隔がほぼ常に 1 呼び出し/秒 (スクリプトが実行しようとしている) になっていることがはっきりとわかります。上部の速度変数を 20 などの小さな値に変更すると (つまり、1 秒あたり 50 回実行しようとする)、間隔は 1 秒あたり平均 50 回の反復には決して到達しません。

遅延はほとんどの場合無視できる程度ですが、非常に精密なプログラミングを行う場合は、自己調整タイマー(基本的には、発生した遅延に合わせて常に自己調整するタイムアウトベースのタイマー) を使用する必要があります。

おすすめ記事