【js的宏任务和微任务】

js的宏任务及微任务详解

1.0什么是单线程?

单线程就是进程中只有一个线程在执行,只有前面的线程执行完了,后面的才可以继续,也就是不存在多个任务同时执行的情况。

1.1 为什么js是单线程

js是单线程语言,那么js之所以是单线程,其实与它的用途来不开关系,首先js开发之初是干嘛的?js作为浏览器的脚本语言,主要用来做与用户的交互的,我们可以通过JavaScript来操作dom,那么如果js是一门多线程语言,假如有一个线程是将这个dom删除,有一个线程是对这个dom进行操作,那么最终的结果将是非常混乱的,所以在开发之初就将他设置为单线程语言。

1.2 什么是同步任务和异步任务
  • 同步任务是指主线程上排队的任务,只有当前一个任务执行完毕,后一个任务才可以开始执行,并不是两个任务同时进行的意思,是有严格的顺序执行的,当我们打开网站时,元素的渲染就是同步任务。
  • 异步任务则是指任务不直接进入主线程,而是进入任务队列,当任务队列通知主线程说某个任务可以开始执行,该任务才会进入主线程,就比如我们打开网页时,图片和音乐的加载就是异步任务,因为他们的加载都需要较长的时间。假如是同步进行的,我把图片放在第一个位置,那么得等图片加载出来了,网页的其他内容才开始渲染,由此可见用户体验很不好
  • 综上,我们可以看出同步任务和异步任务的差别,其实就是两者的执行顺序不同,同步任务有着严格前后顺序,而异步任务就是我一件事情还没做完,我可以先挂起,先做别的,等这件事情准备好了我再来继续做。
    在这里插入图片描述
    上图就是js的Event Loop,当主线程中的任务执行完毕以后,就会开始读取任务队列里的任务进入主线程中执行。
1.3什么是宏任务和微任务
  • 异步任务又可以分为以下两种:宏任务和微任务
    [1] 宏任务:

    • 异步Ajax请求
    • setTimeOut、setInterval
    • 文件操作
    • 其他宏任务

    [2]微任务:

    • Promise.then、.catch、和.finally
    • process.nextTick
    • 其他微任务

在这里插入图片描述
综上,js的执行顺序为同步任务>微任务>宏任务
参考文章:https://juejin.cn/post/6844903512845860872
参考文章:https://blog.csdn.net/weixin_45811256/article/details/123731842
参考文章:https://www.jianshu.com/p/7c00d816bb43

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值