我們都知道JavaScript 是單線程,同一個時間只能做一件事。所有任務(wù)需要排隊,當(dāng)前隊列的任務(wù)也分為兩種,一種是同步任務(wù)(synchronous),另一種是異步任務(wù)(asynchronous),在所有同步任務(wù)執(zhí)行完之前,任何的異步任務(wù)是不會執(zhí)行的。
事件=>同步=>異步

其中異步任務(wù)中又分為 宏任務(wù)(macrotasks)、微任務(wù)(microtasks),執(zhí)行到異步任務(wù)時先執(zhí)行宏任務(wù),把宏任務(wù)放入Event Queue,然后在執(zhí)行微任務(wù),在將微任務(wù)放入Event Queue (這里要注意一點微任務(wù)和宏任務(wù)Event Queue是兩個不同的空間)? ?等到回調(diào)的時候是先微任務(wù)然后在宏任務(wù)
執(zhí)行:宏任務(wù)=>微任務(wù)? callback : 微任務(wù)=>宏任務(wù)
宏任務(wù)包括:整體代碼 script,setTimeout,setInterval
微任務(wù)包括:Promise,process.nextTick