我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript 微任务和宏任务讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript 微任务和宏任务讲解

前言:

js是一门单线程语言,所以它本身是不可能异步的,但是js的宿主环境(比如浏览器、node)是多线程,宿主环境通过某种方式(事件驱动)使得js具备了异步的属性。而在js中,我们一般将所有的任务都分成两类,一种是同步任务,另外一种是异步任务。而在异步任务中,又有着更加细致的分类,那就是微任务和宏任务

1.概念

1.1宏任务

宏任务 ---- setTimeoutsetIntervalDOM事件、AJAX请求

浏览器为了能够使得JS内部task与DOM任务能够有序的执行,会在一个task执行结束后,在下一个 task 执行开始前,对页面进行重新渲染 (task->渲染->task->…)

1.2微任务

微任务 ---- Promiseasync/await

微任务通常来说就是需要在当前 同步任务 执行结束后立即执行的任务,比如对一系列动作做出反馈,或者是需要异步的执行任务而又不需要分配一个新的任务,这样便可以减小一点性能的开销。

2.执行顺序

先来看一段代码,在来探讨执行顺序:


   console.log(1)
    setTimeout(() => {
      console.log(2)
    })
    Promise.resolve().then(() => {
      console.log(3)
    })
    console.log(4)


上面段代码打印的结果为1 4 3 2 。从上面代码,可以得出他们的执行顺序是:

​ 先执行同步代码,遇到异步宏任务时候则将异步宏任务放入宏任务队列中,遇到异步微任务的时候则将异步微任务放入微任务列表中,当所有的同步代码执行完毕后,在将异步微任务从列表中调入主线程执行,异步微任务执行完毕之后再将异步宏任务从队列中调入主线程执行,一直循环到素有任务执行完毕。

注意:微任务执行下先于页面渲染的

3.任务关系

宏任务是主流,当js开始被执行的时候,就是开启一个宏任务,在宏任务中执行一条一条的指令,宏任务可以同时拥有多个,但是会按照顺序一个一个执行。

每一个宏任务,后面都可以跟着一个微任务队列,如果微任务队列中有指令或者方法,则先执行。如果没有,则开始执行下一个宏任务,知道所有的宏任务执行完毕。

4.任务详解

为什么有了宏任务后,还是会有微任务的存在?那是因为宏任务太占用性能,当需要一些较早就准备好的方法,排在最后才执行的时候,又不想新增一个宏任务,那么就可以把这些方法,一个一个的放在微任务队列里面,在这个宏任务中的代码执行完后,就会执行微任务队列。

因此当前同步代码执行,遇到异步任务,如果是异步宏任务,放入下一轮宏任务队列,是异步微任务,放入微任务队列跟在当前宏任务屁股后面。微任务相当于宏任务的小尾巴,因此当前宏任务执行完,在它后面等着的异步微任务就会被立刻放入队列继续执行。而异步的宏任务需要等到下一轮,从而造成了异步中微任务在宏任务之前执行的情况。

到此这篇关于JavaScript 微任务和宏任务讲解的文章就介绍到这了,更多相关JavaScript 微任务和宏任务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript 微任务和宏任务讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript中宏任务和微任务有哪些

小编给大家分享一下JavaScript中宏任务和微任务有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、微任务有哪些Promiseawait和async2、
2023-06-25

深入理解JavaScript中的宏任务和微任务机制

JavaScript中的任务分为宏任务和微任务,它们的执行顺序会影响代码的执行结果。了解它们的机制可以帮助我们更好地理解事件循环和异步编程,避免出现一些意想不到的错误
2023-05-18

JavaScript中的宏任务和微任务执行顺序

在 JavaScript 中,宏任务和微任务是指在执行代码的过程中的两种不同的任务类型,这篇文章主要介绍了JavaScript中的宏任务和微任务执行顺序,需要的朋友可以参考下
2022-12-27

如何进行JavaScript微任务和宏任务的分析

这篇文章将为大家详细讲解有关如何进行JavaScript微任务和宏任务的分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言:js是一门单线程语言,所以它本身是不可能异步的,但是js的宿主
2023-06-22

JavaScript事件循环剖析宏任务与微任务

这篇文章主要为大家介绍了JavaScript事件循环剖析宏任务与微任务示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

JavaScript中的宏任务和微任务执行顺序是什么

这篇“JavaScript中的宏任务和微任务执行顺序是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript
2023-07-04

JS的执行机制(EventLoop、宏任务和微任务)

这篇文章主要介绍了JS的执行机制(EventLoop、宏任务和微任务),具有很好的参考价值,希望对大家有所帮助。
2023-01-28

vue中的任务队列和异步更新策略(任务队列,微任务,宏任务)

这篇文章主要介绍了vue中的任务队列和异步更新策略(任务队列,微任务,宏任务),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

深入理解JS中的微任务和宏任务的执行顺序及应用场景

JavaScript中的任务分为宏任务和微任务,它们的执行顺序会影响代码的执行结果。了解它们的机制可以帮助我们更好地理解事件循环和异步编程,避免出现一些意想不到的错误
2023-05-19

编程热搜

目录