JS EventLoop

EventLoop 事件循環(huán)
本篇摘錄于這一次,徹底弄懂 JavaScript 執(zhí)行機制

setTimeout(function(){
    console.log('定時器開始啦')
});

new Promise(function(resolve){
    console.log('馬上執(zhí)行for循環(huán)啦');
    for(var i = 0; i < 10000; i++){
        i == 99 && resolve();
    }
}).then(function(){
    console.log('執(zhí)行then函數(shù)啦')
});

console.log('代碼執(zhí)行結(jié)束');

實際上打印出來的是(知識點就是異步任務(wù)的 宏任務(wù)以及微任務(wù)的順序)

// 馬上執(zhí)行for循環(huán)啦
// 代碼執(zhí)行結(jié)束
// 執(zhí)行then函數(shù)啦
// 定時器開始啦

任務(wù)分為:

  • 同步任務(wù)
  • 異步任務(wù)
image.png

任務(wù)隊列(task/event queue ?)又分為:宏任務(wù)隊列(可以包含多個,個人理解是宏任務(wù)過大,所以分為多個進(jìn)行,而微任務(wù)小所以集成一個),微任務(wù)隊列(只有一個)

異步任務(wù)有更精細(xì)的定義:

  • macro-task(宏任務(wù))包括整體代碼 script,setTimeout,setInterval,setImmediate(node.js)
  • micro-task(微任務(wù)) Promise,process.nextTick(node.js)

整體任務(wù)的順序: 先進(jìn)行宏任務(wù)(可以有多個)-> 微任務(wù) -> 宏任務(wù) -> 微任務(wù) ···

image.png

異步編程模式有哪些呢?

1. 事件監(jiān)聽(事件發(fā)布/訂閱)

這是一種常見的異步編程內(nèi)模式,典型的邏輯分離方式,對代碼解耦很有用處

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

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

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