美文网首页
浏览器事件循环之宏任务和微任务

浏览器事件循环之宏任务和微任务

作者: 努力学习的小丸子 | 来源:发表于2021-04-18 21:17 被阅读0次

    node 事件循环见:https://www.jianshu.com/p/69d2b70d3163
    参考:https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/?utm_source=html5weekly

    we don't add another mutation microtask as one is already pending


    image.png

    三个概念:JS堆栈、宏任务、微任务。
    js 是一个单线程语言。
    在执行一个js文件的过程中,js堆栈中一直有任务,执行过程中,如果碰到了宏任务或者微任务,会将其分别放入宏任务队列微任务队列中。
    当js文件被执行完,js堆栈为空,此时执行微任务队列中的所有任务。当执行微任务过程中碰到宏任务或者微任务,同样会将其分别放入宏任务队列微任务队列中。
    微任务队列为空,此时执行宏任务队列中的所有任务。在执行过程中

    总结一下:

    宏任务按顺序执行,且浏览器在每个宏任务之间渲染页面
    所有微任务也按顺序执行,且在以下场景会立即执行所有微任务:

    • 每个回调之后且js执行栈中为空。
    • 每个宏任务结束后。


      image.png

    例子:

    console.log('script start');
    
    setTimeout(function () {
        console.log('setTimeout');
        Promise.resolve().then(function () {
            console.log(333)
        })
    }, 0);
    
    Promise.resolve()
        .then(function () {
            console.log('promise1');
            setTimeout(function () {
                console.log('11111'); 
                Promise.resolve().then(function () {
                    console.log(444)
                })
            }, 0)
        })
        .then(function () {
            console.log('promise2');
            Promise.resolve().then(function () { console.log(222) })
        });
    
    console.log('script end');
    

    执行结果:(Chrome 89)


    image.png

    相关文章

      网友评论

          本文标题:浏览器事件循环之宏任务和微任务

          本文链接:https://www.haomeiwen.com/subject/gsmvlltx.html