同步任务(宏任务,微任务),异步任务
首先看下列代码的执行结果
console.log(1)
process.nextTick(function(){
console.log(2)
})
setTimeout(function(){
console.log(3)
process.nextTick(function(){
console.log(4)
})
})
Promise.resolve().then(function() {
console.log(5);
}).then(function() {
console.log(6)
});复制代码
同步任务、微任务、宏任务的执行优先级如下:
同步任务 > 微任务 > 宏任务复制代码
宏任务包括
# | 浏览器 | Node |
---|---|---|
I/O | ✅ | ✅ |
setTimeout | ✅ | ✅ |
setInterval | ✅ | ✅ |
setImmediate | ❌ | ✅ |
requestAnimationFrame | ✅ | ❌ |
微任务包括
# | 浏览器 | Node |
---|---|---|
process.nextTick | ❌ | ✅ |
MutationObserver | ✅ | ❌ |
Promise.then catch finally | ✅ | ✅ |
回到题里面
1、第一行是同步任务,优先级最高,所以第一次输出1
2、后面有nextTick,是微任务,有promise是微任务,setTimeout是宏任务,所以setTimeouut里的代码最后执行
3、那就先依次执行微任务nextTick打印了2
4、接着执行另一个微任务promise,打印了5,6
5、接着执行宏任务setTimeout,打印3
6、setTimeout里面有一个微任务,然后执行它,打印4复制代码
// 所以结果就是
1
2
5
6
3
4
复制代码