首页 > 其他 > 详细

事件循环

时间:2021-02-20 15:55:54      阅读:35      评论:0      收藏:0      [点我收藏+]

浏览器: 执行一个宏任务,执行所有微任务

node:先执行所有宏任务,再执行微任务

function test() {
    console.log(‘start‘)
    setTimeout(() => {
        console.log(‘children2‘)
        Promise.resolve().then(() => { console.log(‘children2-1‘) })
    }, 0)
    setTimeout(() => {
        console.log(‘children3‘)
        Promise.resolve().then(() => { console.log(‘children3-1‘) })
    }, 0)
    Promise.resolve().then(() => { console.log(‘children1‘) })
    console.log(‘end‘)
}

test()
/**
 * 浏览器分析
 * 执行一个宏任务,执行完所有微任务
 * 1.start主线执行,
 * 2.children2添加到宏任务队列
 * 3.children3添加到宏任务队列
 * 4.children1添加到微任务队列
 * 5.end主线执行
 * ------------以上主线任务执行完毕,开始检查微任务----------------
 * 6.微任务队列中有children1,执行
 * ------------微任务执行完毕,开始检查宏任务-------------------
 * 7.children2排在宏任务队列第一个,执行,并将children2-1添加到微任务中
 * ------------宏任务执行一个,开始执行所有微任务---------------
 * 8.微任务队列只有children2-1,执行
 * ------------微任务执行完毕,开始检查宏任务-------------------
 * 9.宏任务队列第二个为children3,执行,并将children3-1添加到微任务中
 * ------------宏任务执行一个,开始执行所有微任务---------------
 * 10.微任务队列只有children3-1,执行
 * ------------微任务执行完毕,开始检查宏任务,无,检查微任务,无,代码执行完毕-------------------
 */

/**
 * node11以下版本分析
 * 先执行所有的宏任务,再执行微任务
 * 1.start主线执行,
 * 2.children2添加到宏任务队列
 * 3.children3添加到宏任务队列
 * 4.children1添加到微任务队列
 * 5.end主线执行
 * ------------以上主线任务执行完毕,开始检查微任务----------------
 * 6.微任务队列中有children1,执行
 * ------------微任务执行完毕,开始检查宏任务-------------------
 * 7.children2排在宏任务队列第一个,执行,并将children2-1添加到微任务中
 * 8.宏任务队列第二个为children3,执行,并将children3-1添加到微任务中
 * ------------宏任务全部执行完毕,开始检查微任务-------------------
 * 9.微任务第一个children2-1,执行
 * 10.微任务第二个children3-1,执行
 * ------------微任务执行完毕,开始检查宏任务,无,检查微任务,无,代码执行完毕-------------------
 */

 

事件循环

原文:https://www.cnblogs.com/lianglanlan/p/14420772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!