ベストアンサー1
これらは本質的に同じことをしようとしますが、このアプローチは、1000 ミリ秒待機し、関数を実行してから別のタイムアウトを設定するため、アプローチsetInterval
よりも正確です。したがって、待機期間は実際には 1000 ミリ秒より少し長くなります (関数の実行に時間がかかる場合は、さらに長くなります)。setTimeout
setTimeout
は正確にsetInterval
1000 ミリ秒ごとに実行されると思われるかもしれませんが、JavaScript はマルチスレッド言語ではないため、遅延も発生することに注意することが重要です。つまり、スクリプトの他の部分が実行されている場合は、その部分が完了するまで間隔を空ける必要があります。setInterval
でこのフィドルでは、タイムアウトが遅れる一方で、間隔がほぼ常に 1 呼び出し/秒 (スクリプトが実行しようとしている) になっていることがはっきりとわかります。上部の速度変数を 20 などの小さな値に変更すると (つまり、1 秒あたり 50 回実行しようとする)、間隔は 1 秒あたり平均 50 回の反復には決して到達しません。
遅延はほとんどの場合無視できる程度ですが、非常に精密なプログラミングを行う場合は、自己調整タイマー(基本的には、発生した遅延に合わせて常に自己調整するタイムアウトベースのタイマー) を使用する必要があります。