哈喽,大家好呀,我是前端理想哥,今天来聊一个话题:JS中异步任务为什么分为微任务和宏任务
。
先说结论,为什么分为微任务和宏任务呢?其实主要是为了给紧急任务一个插队的机会。为什么要这么说呢?接下来,我们来详细了解下。
我们都知道,JS是单线程语言,就是一个时间点下 JS 引擎只能去做一件事情,JS中的任务又可以分为同步
和异步
,同步任务是连贯执行的,异步任务是阶段性执行,就是先执行一段,等准备好了再执行回调函数。
在这其中,对于异步任务而言,如果没有特别处理,JS引擎在执行异步任务时,应该是会存在等待的,在等待期间不会去做其他事。
但是,这种模式会存在一个巨大的问题:就是会有大量空闲时间被浪费了。
如果在等待过程中,出现了一个紧急任务,Java作为一个多线程语言可以再开一个线程去处理,而JS 却只能一直等着,这肯定是非常不合理的。
所以,这个时候异步任务回调通知的模式就出现了,JS引擎会在等待异步任务准备的同时去执行其他同步任务,等到异步任务准备好了,再去执行回调函数,这种模式极大地利用了空闲时间,提升了代码执行效率。
这种模式呢,其实就是事件循环,异步任务的回调会遵循先进先出的规则,在 JS 引擎空闲时会一轮一轮地被取出,所以被叫做循环。
而在事件循环中,又会分为微任务和宏任务,每一轮循环中的微任务其实就是在插队执行,给微任务的代码一个提前执行的机会,如果不能插队,那就只能放在把紧急任务放在队尾去执行了。
以上,就是JS 中异步任务为什么分为微任务和宏任务的原因了。
如果你觉得对自己有帮助,欢迎给理想哥一个关注,也可以私聊理想哥加入前端岗位内推群,我们会经常在群里发布各大公司急招岗位和面试求职经验,帮助大家尽快的找到工作。