国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談JavaScript中setInterval和setTimeout的使用問題

2019-11-20 11:56:47
字體:
來源:轉載
供稿:網友

說到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。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉兴市| 兴宁市| 棋牌| 信宜市| 雅安市| 隆回县| 苏尼特右旗| 米脂县| 大竹县| 昌邑市| 泽库县| 宜城市| 阳江市| 稷山县| 湖南省| 桐庐县| 大邑县| 米林县| 漾濞| 唐河县| 衡山县| 建始县| 长沙县| 嫩江县| 隆安县| 松阳县| 江华| 上蔡县| 灵武市| 昌吉市| 龙南县| 富平县| 万荣县| 葫芦岛市| 武宣县| 武汉市| 突泉县| 定远县| 峨边| 丹东市| 双桥区|