JS中异步任务为什么分为微任务和宏任务?

本文解释了JavaScript中异步任务为何分为微任务和宏任务,以解决单线程环境下等待问题,通过事件循环机制提高执行效率。作者还提到微任务的优先级和回调的执行顺序。

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

哈喽,大家好呀,我是前端理想哥,今天来聊一个话题:JS中异步任务为什么分为微任务和宏任务

先说结论,为什么分为微任务和宏任务呢?其实主要是为了给紧急任务一个插队的机会。为什么要这么说呢?接下来,我们来详细了解下。

我们都知道,JS是单线程语言,就是一个时间点下 JS 引擎只能去做一件事情,JS中的任务又可以分为同步异步,同步任务是连贯执行的,异步任务是阶段性执行,就是先执行一段,等准备好了再执行回调函数。

在这其中,对于异步任务而言,如果没有特别处理,JS引擎在执行异步任务时,应该是会存在等待的,在等待期间不会去做其他事。

但是,这种模式会存在一个巨大的问题:就是会有大量空闲时间被浪费了

如果在等待过程中,出现了一个紧急任务,Java作为一个多线程语言可以再开一个线程去处理,而JS 却只能一直等着,这肯定是非常不合理的。

所以,这个时候异步任务回调通知的模式就出现了,JS引擎会在等待异步任务准备的同时去执行其他同步任务,等到异步任务准备好了,再去执行回调函数,这种模式极大地利用了空闲时间,提升了代码执行效率。

这种模式呢,其实就是事件循环,异步任务的回调会遵循先进先出的规则,在 JS 引擎空闲时会一轮一轮地被取出,所以被叫做循环。

而在事件循环中,又会分为微任务和宏任务,每一轮循环中的微任务其实就是在插队执行,给微任务的代码一个提前执行的机会,如果不能插队,那就只能放在把紧急任务放在队尾去执行了。

以上,就是JS 中异步任务为什么分为微任务和宏任务的原因了。

如果你觉得对自己有帮助,欢迎给理想哥一个关注,也可以私聊理想哥加入前端岗位内推群,我们会经常在群里发布各大公司急招岗位和面试求职经验,帮助大家尽快的找到工作。

JavaScript中,任务任务是两种不同类型的任务,它们在事件循环中的处理方式有所不同。理解它们的工作原理对于编写高效的异步代码非常重要。 ### 任务(Microtasks) 任务是在当前任务结束后立即执行的任务。它们通常用于处理那些需要尽快完成的任务。常见的任务包括: - Promise的回调 - `process.nextTick`(Node.js) - `MutationObserver`(浏览器) ### 任务(Macrotasks) 任务是在事件循环的下一个周期执行的任务。它们通常用于处理那些不需要立即完成的任务。常见的任务包括: - `setTimeout` - `setInterval` - `setImmediate`(Node.js) - I/O操作 ### 示例代码 以下是一个简单的示例,展示了任务任务的使用: ```javascript console.log('Start'); setTimeout(() => { console.log('Timeout'); }, 0); Promise.resolve().then(() => { console.log('Promise'); }); console.log('End'); ``` ### 代码解释 1. `console.log('Start');`:立即执行,输出 `Start`。 2. `setTimeout(() => { console.log('Timeout'); }, 0);`:创建一个任务,延迟0毫秒执行,输出 `Timeout`。 3. `Promise.resolve().then(() => { console.log('Promise'); });`:创建一个任务,输出 `Promise`。 4. `console.log('End');`:立即执行,输出 `End`。 ### 执行顺序 根据事件循环的规则,任务会在当前任务执行完毕后立即执行。因此,执行顺序如下: 1. `Start` 2. `End` 3. `Promise` 4. `Timeout` ### 总结 - 任务在当前任务执行完毕后立即执行,优先级高于任务。 - 任务在事件循环的下一个周期执行,优先级低于任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值