事件循环案例讲解

本文详细介绍了事件循环的工作机制,包括主任务、微任务和宏任务的执行顺序,并通过10个案例分析了不同情况下事件循环的执行流程。案例涵盖了Promise、async/await、setTimeout、事件绑定等多种场景,深入解析了微任务内部嵌套宏任务以及宏任务内部的微任务执行顺序。此外,还提到了Node.js v11之后微任务的插队执行特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件循环机制:

执行顺序: 主任务 => 微任务 => 宏任务
宏任务:定时器(setTimeout setInterval、requestAnimationFrame)、事件绑定、ajax回调函数、node的fs模块
微任务: promise.then、 async await 、process.nextTick、queueMicrotask

案例1

console.log('start');
setTimeout(() => {
   
    console.log(333);
}); // 安排明天干的活
Promise.resolve('x').then(() => {
   
    console.log(3);
}).then(() => {
   
    console.log(4);
}).then(() => {
   
    console.log(5); // 小任务无限的加 今天干完否则下不了班
    //nodejs 有小任务限制,跳过直接到宏任务
})
console.log('end');

输出结果:

start => end => 3 => 4 => 5 =>333

解释:

一个微任务情况,依次执行完微任务

案例2

console.log('start');
setTimeout(() => {
   
    console.log(333);
}); // 安排明天干的活
queueMicrotask(() => {
   
    console.log(1);
    queueMicrotask(() => {
   
        console.log(2);
    });
})
Promise.resolve('x').then(() => {
   
    console.log(3);
}).then(() => {
   
    console.log(4);
}).then(() => {
   
    console.log(5); // 小任务无限的加 今天干完否则下不了班
    //nodejs 有小任务限制,跳过直接到宏任务
})
console.log('end');

输出结果:

start => end =>1 => 3 => 2 => 4 => 5 => 333

解释

当有多个微任务执行的时候 ,是交替执行

案例3

console.log(1);
setTimeout(() => {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值