ES6 规范中,宏任务(macrotask)又称为 task,微任务(microtask)又称为 jobs。
宏任务是由宿主发起的,而微任务是由 JS 本身发起。比如,宏任务有:setTimeOut、setInterval、文件操作等;微任务有:Promise.then、Promise.catch等。
微任务和宏任务的执行顺序:
每一个宏任务执行完之后,都会检查是否存在待执行的微任务
如果有,则执行完所有的微任务之后,再继续执行下一个宏任务
简单举例 :
setTimeOut(function() {
console.log(1)
})
new Promise(function(resolve, reject) {
console.log(2)
resolve()
}).then(function() {
console.log(3)
})
console.log(4)
// 结果:2431
分析:
1.先执行所有的同步任务(执行第6行、第12行代码 )
2.再执行微任务(执行第9行代码 )
3.再执行下一个宏任务(执行第2行代码 )