JS中用来存储待执行回调函数的队列包含两个不同的队列
宏队列
用来保存待执行的 宏任务 回调,比如:定时器回调
、DOM事件回调
、ajax回调
微队列
用来保存待执行的 微任务 回调,比如:promise的回调
、MutationObserver的回调
JS执行顺序
- JS引擎首先必须先执行所有的初始化同步任务代码
- 每次准备取出第一个
宏任务
执行前,都要将所有的微任务
一个一个取出来执行
setTimeout(() => {
console.log('setTimeout-1')
new Promise(resolve => {
resolve()
}).then(() => {
console.log('setTimeout-1 中的 promise 回调')
})
})
setTimeout(() => {
console.log('setTimeout-2')
})
new Promise(resolve => {
resolve()
}).then(() => {
console.log('promise-1')
})
new Promise(resolve => {
resolve()
}).then(() => {
console.log('promise-2')
})
/**
执行结果如下:
promise-1
promise-2
setTimeout-1
setTimeout-1 中的 promise 回调 (每次准备取出第一个 宏任务 执行前,都要将所有的 微任务 一个一个取出来执行)
setTimeout-2
*/