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)模式,典型的邏輯分離方式,對代碼解耦很有用處