瀏覽器
關(guān)于微任務(wù)和宏任務(wù)在瀏覽器的執(zhí)行順序是這樣的
執(zhí)行一只task(宏任務(wù))
執(zhí)行完micro-task隊(duì)列(微任務(wù))
如此循環(huán)往復(fù)下去
Node
Node的事件循環(huán)是libuv實(shí)現(xiàn)的
大體的task宏任務(wù)執(zhí)行順序是這樣的
timers定時(shí)器:本階段執(zhí)行已經(jīng)安排的setTimeout()和settinterval()的回調(diào)函數(shù)
pending callbacks待定回調(diào):執(zhí)行延遲到下一個(gè)循環(huán)迭代的I/O回調(diào)
idle.prepard僅系統(tǒng)內(nèi)部使用
poll輪詢 檢索新的I/O事件懦趋,執(zhí)行與I/O相關(guān)的回調(diào)(幾乎所有情況下澎埠,除了關(guān)閉的回調(diào)函數(shù),它們由計(jì)時(shí)器和setimmediate排定的之外 ) 其余情況node將在此阻塞
check檢測(cè) setimmediate()回調(diào)函數(shù)在這里執(zhí)行有鹿。
close callbacks關(guān)閉的回調(diào)函數(shù): 一些準(zhǔn)備關(guān)閉的回調(diào)函數(shù)
微任務(wù)和宏任務(wù)在Node的執(zhí)行順序
Node 10以前
執(zhí)行完一個(gè)階段的所有任務(wù)
執(zhí)行完nexTick隊(duì)列里面的內(nèi)容
然后執(zhí)行完微任務(wù)隊(duì)列的內(nèi)容
Node 11以后?
和瀏覽器的行為統(tǒng)一了都是每執(zhí)行一個(gè)宏任務(wù)就執(zhí)行完微任務(wù)隊(duì)列沪么。
---Every day to be a little better---