宏任务
分类:setTimeout
setInterval
Ajax
事件绑定等
- 宏任务所处的队列就是宏任务队列
- 第一个宏任务队列中只有一个任务:执行主线程的js代码
- 宏任务队列可以有多个
- 当宏任务队列的中的任务全部执行完以后会查看是否有微任务队列,如果有先执行微任务队列中的所有任务,如果没有就查看是否有宏任务队列。
微任务
分类:new Promise().then
(回调) process.nextTick
- 微任务所处的队列就是微任务队列
- 只有一个微任务队列
- 在上一个宏任务队列执行完华后如果有微任务队列就会执行微任务队列中的所有任务
思考下面实例的打印结果
console.log('苹果')
setTimeout(()=>{
console.log('橘子')
},0)
new Promise((resolve,reject)=>{
console.log('香蕉')
resolve()
}).then(()=>{
console.log('西瓜')
})
console.log('菠萝')
- 首先执行第一个宏任务:执行主线程的js代码 分类会打印出:苹果 香蕉 菠萝
- 第一个宏任务执行完毕后,发现有微任务,会执行上面的所有的微任务 打印出:西瓜
- 最后再执行下一个宏任务 打印出:橘子