宏任务 微任务 循环队列

Event loop

js是单线程
事件循环EventLoop是指js执行环境的流程顺序,通过任务队列的机制进行协调,一个loop中可以有多个队列

共两种队列:宏任务(macrotask) 微任务(microtask)
一个 macrotask 执行结束后所有的 microtask,这是一个loop
简单总结:

  1. 执行macrotask队列中最早的task,然后移出
  2. 执行microtask队列中所有任务,全部移出
  3. (下一个循环) 重复1 2

宏任务maccrotask包括:

  • script标签中的代码
  • setTimeout
  • setInterval
  • I/O

微任务

  • Promise .then/ .catch/ .finally

在这里插入图片描述

setTimeout(() => {
    console.log("timeout")
    Promise.resolve().then(() => {
        console.log('d');
    })
}, 0);

new Promise((resolve) => {
    console.log('a');
    setTimeout(() => {
        Promise.resolve().then(() => {
            console.log('b');
        })
        console.log('c');
    }, 0);
    resolve();
}).then(() => {
    console.log("promise")
});

console.log("code")

a code promise timeout d c b

执行顺序:

输出任务
a宏任务1
code宏任务1
promise微任务1
timeout宏任务2
d微任务2
c宏任务3
b微任务3

宏任务2 3都是第一次宏任务中加入到队列中的,但执行是在清空微任务队列后

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值