JavaScript宏任务和微任务区别介绍

 更新时间:2022年07月15日 09:48:45   作者:​ 桃子蘸酱​  
这篇文章主要介绍了JavaScript宏任务和微任务区别介绍,js中的任务,大致分为2类,一类是同步任务,另一类是异步任务。而异步任务,又分为宏任务和微任务,这两个任务是两个队列,所以是先进先出的

分类

js中的任务,大致分为2类,一类是同步任务,另一类是异步任务。而异步任务,又分为宏任务和微任务,这两个任务是两个队列,所以是先进先出的。

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。

异步任务指的是,不进入主线程、而进入"任务队列"的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行

宏任务

主代码块、setTimeout、setInterval等

有些地方会列出来UI Rendering,说这个也是宏任务,可是在读了HTML规范文档以后,发现这很显然是和微任务平行的一个操作步骤

requestAnimationFrame姑且也算是宏任务吧,requestAnimationFrame,下次页面重绘前所执行的操作,而重绘也是作为宏任务的一个步骤来存在的,且该步骤晚于微任务的执行

宏任务是主流,当js开始被执行的时候,就是开启一个宏任务,在宏任务中执行一条一条的指令

宏任务可以同时有多个,但会按顺序一个一个执行;

每一个宏任务,后面都可以跟一个微任务队列,如果微任务队列中有指令或方法,那么就会执行;如果没有,则开始执行下一个宏任务,直到所有的宏任务执行完为止。

微任务

Promise、async/await等

需要注意的是,promise里的then才会被加入微任务,它的resolve是同步里的

async函数里遇到await之前的代码是同步里的,遇到await时,会执行await后面的函数,然后返回一个promise,把await下面的代码放入微任务,并且退出这个async函数。

为什么

为什么有了宏任务,还会有微任务存在?

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

案例

console.log('整体script开始。');

setTimeout(()=>{
    console.log('宏任务setTimeout的回调函数。')
})

Promise.resolve().then(function() {
    console.log('微任务Promise回调函数1。')
}).then(function() {
    console.log('微任务Promise回调函数2。')
})
console.log('整体script结束。')

结果:

整体script开始。
整体script结束。
微任务Promise回调函数1。
微任务Promise回调函数2。
宏任务setTimeout的回调函数。

到此这篇关于JavaScript宏任务和微任务区别介绍的文章就介绍到这了,更多相关JS宏任务与微任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Bootstrap免费字体和图标网站(值得收藏)

    Bootstrap免费字体和图标网站(值得收藏)

    在这篇内容中,我们把这套框架上的免费字体图标做了个整合(当然,以后还会不断的更新)。大家对bootstrap免费字体图标有需要的话,可以参考本教程
    2017-03-03
  • 使用JavaScript渲染页面的方法详解

    使用JavaScript渲染页面的方法详解

    本文主要介绍了使用JavaScript渲染页面的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴下面随着小编来一起来学习吧
    2023-12-12
  • javascript算法学习(直接插入排序)

    javascript算法学习(直接插入排序)

    假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
    2011-04-04
  • JavaScript通过join函数连接数组里所有元素的方法

    JavaScript通过join函数连接数组里所有元素的方法

    这篇文章主要介绍了JavaScript通过join函数连接数组里所有元素的方法,实例分析了javascript中join函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • JS弹出对话框实现方法(三种方式)

    JS弹出对话框实现方法(三种方式)

    这篇文章主要介绍了JS弹出对话框实现方法,结合实例形式分析了三种方式,包括alert、confirm及prompt,非常简单实用,需要的朋友可以参考下
    2015-12-12
  • javascritp添加url参数将参数加入到url中

    javascritp添加url参数将参数加入到url中

    javascritp添加url参数方法,将参数加入到url中,如果原来url中有则覆盖,下面是示例代码,感兴趣的朋友可以参考下
    2014-09-09
  • 前端JavaScript实现文件压缩的全面优化指南

    前端JavaScript实现文件压缩的全面优化指南

    JavaScript文件大小直接影响网页加载速度和用户体验,本文将详细介绍从基础到高级的各种JavaScript压缩优化技术,小伙伴可以根据需求进行选择
    2025-04-04
  • 微信小程序传值以及获取值方法的详解

    微信小程序传值以及获取值方法的详解

    这篇文章主要介绍了微信小程序传值以及获取值方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 利用pixi.js制作简单的跑酷小游戏

    利用pixi.js制作简单的跑酷小游戏

    PixiJS 提供一个适用于所有设备的快速轻量级 2D 库。PixiJS 具有完整的 WebGL 支持,并且可以无缝地回退到 HTML5 的画布。 本文将使用pixi.js制作简单的跑酷小游戏,感兴趣的可以尝试一下
    2022-07-07
  • javascript实现div浮动在网页最顶上并带关闭按钮效果实例

    javascript实现div浮动在网页最顶上并带关闭按钮效果实例

    我们有时会看到有些网站最顶部一直会跟着我们滚动而滚动了,这种方法其实很简单,下面我来给大推荐一个javascript实现div浮动在网页最顶上并带关闭按钮效果
    2013-08-08

最新评论