在單線程JavaScript這篇文章中,在介紹JavaScript單線程的同時(shí),也介紹了setTimeout是如何工作的。但是對(duì)于定時(shí)器的一些內(nèi)容,并沒有做深入的討論。這篇文章,會(huì)詳細(xì)說說JS的兩種定時(shí)器,setTimeout和setInterval,以及它們的工作方式。同時(shí),會(huì)談?wù)動(dòng)嘘P(guān)setTimeout的面試題。
setInterval
setInterval,也稱為間歇調(diào)用定時(shí)器,是指允許設(shè)置間歇時(shí)間來調(diào)用定時(shí)器代碼在特定的時(shí)刻執(zhí)行。也就是說,setInterval會(huì)在每隔指定的時(shí)間就執(zhí)行一次代碼。
setInterval屬于window對(duì)象上的私有方法,它可以接收多個(gè)參數(shù),
第一個(gè)參數(shù)可以是一個(gè)函數(shù),也可以是一個(gè)字符串。
第二個(gè)參數(shù)是每次執(zhí)行之前需要等待的毫秒數(shù),這里有一個(gè)很大的誤區(qū)就是,當(dāng)設(shè)定時(shí)間之后,很多人認(rèn)為會(huì)立即執(zhí)行定時(shí)器,其實(shí)不是。設(shè)定一個(gè) 150ms 后執(zhí)行的定時(shí)器不代表到了 150ms 代碼就立刻執(zhí)行,它表示代碼會(huì)在 150ms 后被加入到任務(wù)隊(duì)列中。如果在這個(gè)時(shí)間點(diǎn)上,主線程上的所有同步任務(wù)都執(zhí)行完畢,并且任務(wù)隊(duì)列上沒有其他任務(wù),那么這個(gè)任務(wù)會(huì)被執(zhí)行;如果主線程上的同步任務(wù)未執(zhí)行完畢,且任務(wù)隊(duì)列上還存在其他異步任務(wù)(包括時(shí)間更短的定時(shí)器),這時(shí)候就要等待以上同步任務(wù)和異步任務(wù)執(zhí)行完畢之后,這個(gè)150ms的任務(wù)才會(huì)開始執(zhí)行。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26