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é)束');
實際上打印出來的是(知識點就是異步任務的 宏任務以及微任務的順序)
// 馬上執(zhí)行for循環(huán)啦
// 代碼執(zhí)行結(jié)束
// 執(zhí)行then函數(shù)啦
// 定時器開始啦
任務分為:
- 同步任務
- 異步任務
image.png
任務隊列(task/event queue ?)又分為:宏任務隊列(可以包含多個瘦癌,個人理解是宏任務過大,所以分為多個進行,而微任務小所以集成一個)蚣常,微任務隊列(只有一個)
異步任務有更精細的定義:
- macro-task(宏任務)包括整體代碼 script厘惦,setTimeout,setInterval鸵赫,setImmediate(node.js)
- micro-task(微任務) Promise,process.nextTick(node.js)
整體任務的順序: 先進行宏任務(可以有多個)-> 微任務 -> 宏任務 -> 微任務 ···
image.png
異步編程模式有哪些呢衣屏?
1. 事件監(jiān)聽(事件發(fā)布/訂閱)
這是一種常見的異步編程內(nèi)模式,典型的邏輯分離方式辩棒,對代碼解耦很有用處