一分钟搞懂js事件循环

一分钟搞懂js事件循环,第1张

  宏任务与微任务:

 异步任务分为 宏任务(macrotask) 与 微任务 (microtask),不同的API注册的任务会依次进入自身对应的队列中,然后等待 Event Loop 将它们依次压入执行栈中执行。

 宏任务(macrotask):script(整体代码)、setTimeout、setInterval、UI 渲染、 I/O、postMessage、 MessageChannel、setImmediate(Node.js 环境)微任务(microtask):Promise、 MutaionObserver、process.nextTick(Node.js环境) Event Loop(事件循环):

Event Loop(事件循环)中,每一次循环称为 tick, 每一次tick的任务如下:

执行栈选择最先进入队列的宏任务(通常是script整体代码),如果有则执行检查是否存在 微任务 (microtask),如果存在则不停的执行,直至清空  微任务 (microtask) 队列更新render(每一次事件循环,浏览器都可能会去更新渲染)重复以上步骤形成循环宏任务 > 所有微任务 > 宏任务

代码实例
setTimeout(function () {
    console.log(1);
});

new Promise(function (resolve, reject) {
    console.log(2)
    resolve(3)
}).then(function (val) {
    console.log(val);
})

console.log(4);

执行讲解

先执行script同步代码:执行new Promise中的console.log(2),then后面的不执行属于微任务然后执行console.log(4)执行完script宏任务后,执行微任务,console.log(3),没有其他微任务了执行另一个宏任务,定时器,console.log(1)

 结果:2=>4=>3=>1

   

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/940932.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-17
下一篇2022-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存