国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【JavaScript】定時器清除以后回調(diào)定時器

impig33 / 813人閱讀

摘要:鏈?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

相關(guān)文章

  • 細(xì)說 Javascript 拾遺篇(四) : setTimeout 和 setInterval

    摘要:當(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 ...

    wangjuntytl 評論0 收藏0
  • 前端面試--瀏覽器

    摘要:打開一個網(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 到頁面展示...

    bigdevil_s 評論0 收藏0
  • Nodejs高性能原理(下) --- 事件循環(huán)詳解

    摘要:如果一個即時定時器是被一個正在執(zhí)行的回調(diào)排入隊列的,則該定時器直到下一次事件循環(huán)迭代才會被觸發(fā)。參數(shù)描述在事件循環(huán)的當(dāng)前回合結(jié)束時要調(diào)用的函數(shù)。事件輪詢隨后的調(diào)用,會在任何事件包括定時器之前運行。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅(qū)動模型Nodejs高性能原理(下) --- 事件循環(huán)詳解 前言 終于開始我nodejs的博客生涯了,先從基本的原理講起.以前寫...

    newsning 評論0 收藏0
  • 前端20個真正靈魂拷問,吃透這些你就是中級前端工程師 【上篇】

    摘要:還是老規(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)上參差不棄的面試題,本文由淺入深,讓你在...

    mdluo 評論0 收藏0
  • 前端20個真正靈魂拷問,吃透這些你就是中級前端工程師 【上篇】

    摘要:還是老規(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)上參差不棄的面試題,本文由淺入深,讓你在...

    leap_frog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<