宏任务 微任务 循环队列

本文深入探讨了JavaScript的事件循环机制,包括单线程执行、宏任务与微任务的概念,以及它们在事件循环中的执行顺序。示例代码展示了setTimeout、Promise等如何影响任务队列,解释了任务的执行顺序,帮助理解JavaScript异步编程的核心原理。
摘要由CSDN通过智能技术生成

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都是第一次宏任务中加入到队列中的,但执行是在清空微任务队列后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值