首頁 >web前端 >js教程 >淺談JavaScript中setInterval與setTimeout的使用問題_基礎知識

淺談JavaScript中setInterval與setTimeout的使用問題_基礎知識

WBOY
WBOY原創
2016-05-16 15:47:371402瀏覽

說到setInterval,就必須提到setTimeout,二者都是用來定時執行某函數,差別在於setTimeout 只執行一次,而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