参考: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