Javascript-宏隊(duì)列與微隊(duì)列

背景

當(dāng)我們忙于公司業(yè)務(wù)開發(fā),習(xí)慣于control+c、control+v這種機(jī)械化操作時(shí),我們將會(huì)離我們的理想越來越遠(yuǎn)。你可能會(huì)忘記或者疏于最基本,最底層的原理。在此,我們將一起踏上回頭路,去探望我們遺失的美好。

之前在網(wǎng)上看了很多關(guān)于setTimeout,setinterval,promise等的文章,都能起到延遲執(zhí)行的效果。但具體怎么執(zhí)行,順序怎樣,講解的都很片面,最近正好也被人問道,所以總結(jié)了一下以供大家參考。寫的不好請(qǐng)留言多多指教,謝謝。

說起setTimeout,setinterval,promise等能夠?qū)崿F(xiàn)異步執(zhí)行,我們必須先了解下JS的

事件循環(huán)

Event Loop,不管是前端、還是移動(dòng)端(IOS和Android)等開發(fā),都離不開事件循環(huán)機(jī)制,他會(huì)循環(huán)監(jiān)聽任務(wù),并在適當(dāng)?shù)臅r(shí)機(jī)取出、執(zhí)行和釋放任務(wù),更新UI等操作,更新UI渲染界面比較耗時(shí),不同的渲染引擎有自己的一套渲染時(shí)機(jī)邏輯,決定要不要馬上執(zhí)行更新,畢竟更新UI成本大。

任務(wù)隊(duì)列

宏任務(wù):script(全局任務(wù)), setTimeout, setInterval, setImmediate, I/O, UI rendering.

微任務(wù):process.nextTick, Promise.then, Object.observer, MutationObserver.

閉包

說起閉包,最明顯的特點(diǎn)有三個(gè),

1、函數(shù)套函數(shù)。

2、內(nèi)部函數(shù)可以訪問外部函數(shù)的變量。

3、局部變量,垃圾回收機(jī)制無法收回。

? ?通過示例來查看執(zhí)行順序

輸出結(jié)果

總結(jié)

????1、js中為了防止線程阻塞,阻止全局代碼的執(zhí)行,衍生出很多異步執(zhí)行解決方案,這些方案都會(huì)按需加載到指定的隊(duì)列中,當(dāng)全局隊(duì)列執(zhí)行完畢后,開始循環(huán)從 微隊(duì)列->宏隊(duì)列->微隊(duì)列->宏隊(duì)列...這種執(zhí)行順序執(zhí)行下去。

????2、當(dāng)一個(gè)宏觀隊(duì)列執(zhí)行完畢,立刻執(zhí)行最近添加的微觀隊(duì)列。

????3、這種邏輯也可以為首頁加速帶來思路。

在使用中有任何問題,歡迎留言反饋給我。書寫不易,希望大家可以喜歡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容