摘要:鏈?zhǔn)秸{(diào)用的模式下面是實現(xiàn)定時器清除以后回調(diào)定時器的一段偽代碼看一段實例函數(shù)實現(xiàn)數(shù)字從增加到,每增加一次在控制臺打印一次。結(jié)束以后可以立即執(zhí)行回調(diào)函數(shù)。
在《JavaScript高級程序設(shè)計》一書中,列舉了兩條setInterval()的缺點:
某些間隔會被跳過;
多個定時器的代碼執(zhí)行之間的間隔可能會比預(yù)期的小。
書中給出了替代方案:鏈?zhǔn)秸{(diào)用setTimeout()。所以我現(xiàn)在更傾向于使用setTimeout()。
鏈?zhǔn)秸{(diào)用setTimeout()的模式:
setTimeout(function(){ //todo setTimeout(arguments.callee, delay); }, delay);
下面是實現(xiàn)定時器清除以后回調(diào)定時器的一段偽代碼:
function callbackTimer(..., fn) { return function() { setTimeout(function() { if (...) { //todo setTimeout(arguments.callee, delay); } else if (fn instanceof Function) { fn(); fn = null; } }, delay) }; }
看一段實例:count函數(shù)實現(xiàn)數(shù)字從min增加到max,每增加一次在控制臺打印一次。結(jié)束以后可以立即執(zhí)行回調(diào)函數(shù)。
function count(min, max, delay, fn) { return function() { setTimeout(function() { if (min <= max) { console.log(min++); setTimeout(arguments.callee, delay); } else if (fn instanceof Function) { fn(); fn = null; } }, delay); }; } var count2 = count(11, 20, 500); var count1 = count(1, 10, 200, count2); count1();
在控制臺內(nèi)先以0.2s一次的頻率打印1~10,之后再以0.5s一次的頻率打印11~20。
轉(zhuǎn)載請注明出處:https://segmentfault.com/a/1190000004639491
文章不定期更新完善,如果能對你有一點點啟發(fā),我將不勝榮幸。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78949.html
摘要:當(dāng)間隔時間設(shè)置較小時,將會導(dǎo)致回調(diào)函數(shù)堆積。處理可能阻塞的代碼最簡單且最可控的方式就是在回調(diào)函數(shù)內(nèi)部使用函數(shù)。但是很明顯,由于指定最大值的限制,還會有定時器沒有被清除掉。另外,盡量避免使用函數(shù),從而避免可能導(dǎo)致的回調(diào)函數(shù)堆積現(xiàn)象。 由于 Javascript 是異步的,因此我們可以通過 setTimeout 和 setInterval 函數(shù)來指定特定時間執(zhí)行代碼。 function ...
摘要:打開一個網(wǎng)頁,看到服務(wù)器返回給客戶端瀏覽器的各種文件類型圖片構(gòu)建瀏覽器會遵守一套步驟將文件轉(zhuǎn)換為樹。因為瀏覽器有渲染線程與引擎線程,為了防止渲染出現(xiàn)不可預(yù)期的結(jié)果,這兩個線程是互斥的關(guān)系。 1. 瀏覽器架構(gòu) 用戶界面 主進(jìn)程 內(nèi)核 渲染引擎 JS 引擎 執(zhí)行棧 事件觸發(fā)線程 消息隊列 微任務(wù) 宏任務(wù) 網(wǎng)絡(luò)異步線程 定時器線程 2. 從輸入 url 到頁面展示...
摘要:如果一個即時定時器是被一個正在執(zhí)行的回調(diào)排入隊列的,則該定時器直到下一次事件循環(huán)迭代才會被觸發(fā)。參數(shù)描述在事件循環(huán)的當(dāng)前回合結(jié)束時要調(diào)用的函數(shù)。事件輪詢隨后的調(diào)用,會在任何事件包括定時器之前運行。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅(qū)動模型Nodejs高性能原理(下) --- 事件循環(huán)詳解 前言 終于開始我nodejs的博客生涯了,先從基本的原理講起.以前寫...
摘要:還是老規(guī)矩,從易到難吧傳統(tǒng)的定時器,異步編程等。分配對象時,先是在空間中進(jìn)行分配。內(nèi)存泄漏內(nèi)存泄漏是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導(dǎo)致程序運行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。 showImg(https://segmentfault.com/img/bVbwkad?w=1286&h=876); 網(wǎng)上參差不棄的面試題,本文由淺入深,讓你在...
摘要:還是老規(guī)矩,從易到難吧傳統(tǒng)的定時器,異步編程等。分配對象時,先是在空間中進(jìn)行分配。內(nèi)存泄漏內(nèi)存泄漏是指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導(dǎo)致程序運行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。 showImg(https://segmentfault.com/img/bVbwkad?w=1286&h=876); 網(wǎng)上參差不棄的面試題,本文由淺入深,讓你在...
閱讀 928·2021-11-08 13:22
閱讀 2853·2021-09-29 09:45
閱讀 2831·2021-09-09 11:52
閱讀 2264·2019-08-30 13:20
閱讀 3749·2019-08-29 13:28
閱讀 1366·2019-08-29 12:32
閱讀 2730·2019-08-29 11:10
閱讀 1650·2019-08-26 13:34