js执行时有两个异步队列:宏队列和微队列。优先执行微队列中的任务,而且每次执行完宏队列中的任务后,都会查看微队列中是否有任务,假如有任务则先执行微队列中的任务,再执行宏队列中的任务。例外:浏览器会先执行一个宏任务——script
。
- 宏队列存储的是:
script
、setTimeout
、setInterval
、setImmediate
、I/O
、UI rendering
、ajax回调 - 微队列存储的是:
promise
、mutation
、process.nextTick
、Object.observe
、MutationObserver
setTimeout(() => {
console.log('我是宏队列1')
Promise.resolve(3).then(val => {
console.log('我是微队列' + val)
})
}, 0)
setTimeout(() => {
console.log('我是宏队列2')
}, 0)
Promise.resolve(1).then(val => {
console.log('我是微队列' + val)
})
Promise.resolve(2).then(val => {
console.log('我是微队列' + val)
})
console.log('我是主线程')
执行结果如下:
我是主线程
我是微队列1
我是微队列2
我是宏队列1
我是微队列3
我是宏队列2