參考:js事件循環機制javascript
任務隊列主要分爲兩種:html
宏任務(macro task):在新標準中叫taskhtml5
宏任務主要包括:script(總體代碼), setTimeout, setInterval, setImmediate, I/O, UI rendering
微任務(micro task):在新標準中叫jobsjava
微任務主要包括:process.nextTick, Promise, Object.observe(已廢棄), MutationObserver(html5新特性)
以上提到的不僅有瀏覽器方法,還有nodejs的方法,這裏不具體說明了node
分解執行過程:segmentfault
很差理解的地方:瀏覽器
以上兩句可能有點繞,能夠參考上面循環機制的連接,有相關圖解。數據結構
換個說法:微任務優先於當前調用棧產生的宏任務被執行函數
若是能理解下面這段代碼的執行過程應該就基本理解任務隊列的執行過程了:oop
setTimeout(() => { console.log('1') new Promise((resolve) => { resolve() }).then(() => { console.log('2') }) }, 0); setTimeout(() => { console.log('3') }, 0); new Promise((resolve) => { resolve() }).then(() => { console.log('4') new Promise((resolve) => { resolve() }).then(() => { console.log('5') }) setTimeout(() => { console.log('6') }, 0); }) new Promise((resolve) => { resolve() }).then(() => { console.log('7') }) // 輸出順序爲: 4,7,5,1,2,3,6