ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript での setInterval と setTimeout の使用に関する簡単な説明_基礎知識

JavaScript での setInterval と setTimeout の使用に関する簡単な説明_基礎知識

WBOY
WBOYオリジナル
2016-05-16 15:47:371371ブラウズ

setInterval に関して言えば、setTimeout について言及する必要があります。どちらも特定の関数を定期的に実行するために使用されますが、setTimeout は 1 回のみ実行されるのに対し、setInterval は継続的に実行できるという点が異なります。 >

function do_sth() { console.log('Hello...'); }

setTimeout(do_sth, 2500);  // 2.5 秒后,执行 do_sth 函数(只执行一次)
setInterval(do_sth, 3500); // 3.5 秒后,执行 do_sth 函数(每隔 3.5 秒执行一次,一直执行下去)

表面的には、どちらも独自の用途があり、問題はありません。ただし、setInterval によって実行される関数が時間のかかるアクションである場合、setInterval は、以前のブロックに関係なく、引き続きその関数を呼び出します。このようにして、時間の経過とともに、実行を待機している関数の数が増加します。キューの数が増えます。この問題の解決策は、次のように setTimeout を再帰的に呼び出すことです。

function do_sth() {
 console.log('Hello...');  // 即使这里执行比较耗时的动作也没问题,
                  // 等这里执行完了才会再去调用 setTimeout

 setTimeout(do_sth, 2500); // 安排后续执行
}

do_sth();             // 初次执行

この再帰呼び出し方法は、ループ内で特定の関数を実行するという目的を達成できるだけでなく、後続のタスクの蓄積を防ぐこともできます。

このメソッドが少し冗長だと思われる場合は、より簡潔に書くことができます:

(function() {
 console.log('Hello...');  // do something here
 setTimeout(arguments.callee, 2500);
})();

以上ですが、スケジュール実行のタスクコストが小さい場合はsetIntervalでも通常は問題ありませんが、タスクコストが比較的高い場合は必ずsetTimeoutを使用してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。