js 宏任务和微任务

2019-07-25  本文已影响0人  叫我苏轼好吗

1:主线程

image.png

2:.宏任务(macrotask )和微任务(microtask )


image.png

最后看个例子:

setTimeout(() => {
    //执行后 回调一个宏事件
    console.log('内层宏事件3')
}, 0)
console.log('外层宏事件1');

new Promise((resolve) => {
    console.log('外层宏事件2');
    resolve()
}).then(() => {
    console.log('微事件1');
}).then(()=>{
    console.log('微事件2')
})
外层宏事件2
微事件1
微事件2
内层宏事件3

分析

• 首先浏览器执行js进入第一个宏任务进入主线程, 遇到 setTimeout 分发到宏任务Event Queue中

• 遇到 console.log() 直接执行 输出 外层宏事件1

• 遇到 Promise, new Promise 直接执行 输出 外层宏事件2

• 执行then 被分发到微任务Event Queue中

•第一轮宏任务执行结束,开始执行微任务 打印 '微事件1' '微事件2'

•第一轮微任务执行完毕,执行第二轮宏事件,打印setTimeout里面内容'内层宏事件3'

变化

setTimeout(() => {
    //执行后 回调一个宏事件

 new Promise((resolve) => {
    console.log('时间');
    resolve()
 }).then(() => {
    console.log('微事件1');
}).then(()=>{
    console.log('微事件2')
})
    console.log('内层宏事件3')
}, 0)
console.log('外层宏事件1');

new Promise((resolve) => {
    console.log('外层宏事件2');
    resolve()
}).then(() => {
    console.log('微事件1');
}).then(()=>{
    console.log('微事件2')
})

输出什么???
上一篇下一篇

猜你喜欢

热点阅读