1.常见的宏任务:
script(整体代码)、setTimeout、setInterval、I/O、setImmedidate,ajax
2.常见的微任务:
process.nextTick、MutationObserver、Promise.then catch finally
3.执行顺序
浏览器维护了一个事件队列,当主线程任务执行完成后,每隔相应的时间就会来事件队列查看,看看有咩有需要执行的任务。任务又分为宏任务和微任务,宏任务快于微任务。
4.一道题目
setTimeout(()=>{
console.log('timer1')
Promise.resolve().then(function() {
console.log('promise1')
})
}, 0)
setTimeout(()=>{
console.log('timer2')
Promise.resolve().then(function() {
console.log('promise2')
})
setTimeout(() => {
console.log('timer3')
}, 0)
}, 0)
setTimeout(()=>{
console.log('timer4')
}, 0)
Promise.resolve().then(function() {
console.log('promise3')
})
console.log('start')
输出顺序为:
start
promise3
timer1
promise1
timer2
promise2
timer4
timer3