码迷,mamicode.com
首页 > 其他好文 > 详细

事件循环执行顺序

时间:2020-06-11 20:07:47      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:浏览器   线程   任务   RoCE   func   rom   tick   循环   执行   

//主线程直接执行
console.log(‘1‘);
//丢到宏事件队列中
setTimeout(function() {
    console.log(‘2‘);
    process.nextTick(function() {
        console.log(‘3‘);
    })
    new Promise(function(resolve) {
        console.log(‘4‘);
        resolve();
    }).then(function() {
        console.log(‘5‘)
    })
})
//微事件1
process.nextTick(function() {
    console.log(‘6‘);
})
//主线程直接执行
new Promise(function(resolve) {
    console.log(‘7‘);
    resolve();
}).then(function() {
    //微事件2
    console.log(‘8‘)
})
//丢到宏事件队列中
setTimeout(function() {
    console.log(‘9‘);
    process.nextTick(function() {
        console.log(‘10‘);
    })
    new Promise(function(resolve) {
        console.log(‘11‘);
        resolve();
    }).then(function() {
        console.log(‘12‘)
    })
})
首先浏览器执行js进入第一个宏任务进入主线程, 直接打印console.log(‘1‘)

? 遇到 setTimeout  分发到宏任务Event Queue中

? 遇到 process.nextTick 丢到微任务Event Queue中

? 遇到 Promise, new Promise 直接执行 输出 console.log(‘7‘);

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

?第一轮宏任务执行结束,开始执行微任务 打印 6,8

?第一轮微任务执行完毕,执行第二轮宏事件,执行setTimeout

?先执行主线程宏任务,在执行微任务,打印‘2,4,3,5‘

?在执行第二个setTimeout,同理打印 ‘9,11,10,12’

?整段代码,共进行了三次事件循环,完整的输出为1,7,6,8,2,4,3,5,9,11,10,12。

事件循环执行顺序

标签:浏览器   线程   任务   RoCE   func   rom   tick   循环   执行   

原文地址:https://www.cnblogs.com/shiyunfront/p/13095128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!