目录

同步任务

异步任务

异步任务分类

例题


众所周知,JS是单线程的,那么如果出现多个任务,这些任务的执行顺序是怎么样的呢?这就不得不提一下事件循环

同步任务

首先,我们用一个栈来表示主线程

当有多个同步任务时,这些同步任务会依次入栈出栈,如下图

同步任务1先入栈,执行完之后,出栈,接着同步任务2入栈,依此类推

这只是同步任务的执行方式,那么异步任务呢?

异步任务

异步任务会在同步任务执行之后再去执行,那么如果异步任务代码在同步任务代码之前呢?在js机制里,存在一个队列,叫做任务队列,专门用来存放异步任务。也就是说,当异步任务出现的时候,会先将异步任务存放在任务队列中,当执行完所有的同步任务之后,再去调用任务队列中的异步任务

例如下图,现在存在两个同步任务,两个异步任务

js会先将同步任务1提至主线程,然后发现异步任务1和2,则将异步任务1和2依次放入任务队列

然后同步任务1执行完之后出栈,又将同步任务2入栈执行

当同步任务2执行完之后,再从任务队列中提取异步任务执行

异步任务分类

js中,又将异步任务分为宏任务和微任务,所以,上述任务队列也分为宏任务队列和微任务队列,那么,什么是宏任务,什么是微任务呢?

I/O、定时器、事件绑定、ajax等都是宏任务

Promise的then、catch、finally和process的nextTick都是微任务

注意:Promise的then等方法是微任务,而Promise中的代码是同步任务,并且,process的nextTick的执行顺序优先于Promise的then等方法,因为process.nextTick是直接告诉浏览器说要尽快执行,而不是放入队列

js中,微任务总是先于宏任务执行,也就是说,这三种任务的执行顺序是:同步任务>微任务>宏任务

例题

<script>console.log(1);setTimeout(function(){console.log(2)},0)new Promise((resolve,reject)=>{console.log(3)resolve()console.log(4)}).then(()=>{console.log(5)})console.log(6)
</script>

上述代码的执行结果是:

讲解:

欢迎指正

事件循环(Event Loop)相关推荐

  1. 技术干货 | JavaScript 之事件循环(Event Loop)

    导读:学过 JavaScript(下文简称 JS) 的都知道它是一门单线程的.非阻塞的脚本语言.单线程意味着,JS 代码在执行的任何时候,都只有一个主线程来处理所有的任务,这也就意味着 JS 无法进行 ...

  2. python事件循环_简单了解一下事件循环(Event Loop)

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  3. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

  4. JavaScript 异步执行的学习笔记 - 什么是事件循环 Event loop?

    原文 使用像 JavaScript 这样的语言进行编程时,最重要但也经常被误解的部分之一是如何表达和操作一段需要某段时间才能完成执行的程序行为. 这不仅仅是从 for 循环开始到 for 循环结束发生 ...

  5. JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)

    事件循环(Event Loop),是每个JS开发者都会接触到的概念,但是刚接触时可能会存在各种疑惑. 众所周知,JS是单线程的,即同一时间只能运行一个任务.一般情况下这不会引发问题,但是如果我们有一个 ...

  6. 面试率 90% 的JS事件循环Event Loop,看这篇就够了!! !

    面试率 90% 的JS事件循环Event Loop,看这篇就够了!! ! 事件循环(Event Loop)大家应该并不陌生,它是前端极其重要的基础知识.在平时的讨论或者面试中也是一个非常高频的话题. ...

  7. JavaScript基础:浅聊事件循环(Event LooP)以及微任务,宏任务,DOM渲染

    一直说JavaScript是单线程的执行的(当然也可以通过其它其它的方式异步,本篇暂时不聊). 内核的组成 首先聊一下浏览器的内核组成部分,当然下面也不是全部,而只是说一些常见的. 主线线程 js引擎 ...

  8. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念

    说事件循环(event loop)之前先要搞清楚几个问题. 1. js为什么是单线程的? 试想一下,如果js不是单线程的,同时有两个方法作用dom,一个删除,一个修改,那么这时候浏览器该听谁的? 2. ...

  9. javascript事件循环Event Loop,宏任务与微任务

    1.javascript的运行机制介绍 javascript是单线程的语言,默认情况下一个时间点只能做一件事情,因此引入异步模型javascript是一门解释性脚本语言,即(边解释边运行) 2.阻塞式 ...

  10. [转] JavaScript:彻底理解同步、异步和事件循环(Event Loop)

    一. 单线程 我们常说"JavaScript是单线程的". 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个.不妨叫它主线程. 但是实际上还存在其他 ...

最新文章

  1. Nginx 性能调优实战
  2. docker 安装MongoDB以及设置用户
  3. 试玩UML(User Mode Linux)
  4. 【组合数学】递推方程 ( 常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 | 通解的四种情况 )
  5. 【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计
  6. 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt
  7. JavaScript 表格专题
  8. ios 网络状态获取_Network Kit X——网络检测工具箱
  9. pc端滚动去掉滚动条scroll
  10. 中国工业行业分类英文翻译
  11. xss.haozi.me靶机
  12. 电商平台开发你需要注意下面的几点!
  13. 从一个置顶CPT广告学习计算广告设计要点
  14. 2678v3支持内存频率_你听过E5-2678 v3这款CPU吗?我用它帮朋友干了件大事!
  15. 2021-05-11 MongoDB面试题 MySQL与MongoDB之间最基本的差别是什么
  16. 2021计算机学校分数,泰州市博日电脑技术学校2021年招生录取分数线
  17. 关于vs2022设置默认浏览器
  18. jwt-auth官方文档
  19. Android工具类的整理
  20. fastJson、JackJson以及Gson序列化对象与get、set以及对象属性之间的关系

热门文章

  1. Python2和Python3的区别,为什么大家都要选Python3的原因
  2. PMP培训费要多少钱
  3. 图像处理SIFT与SURF算法详解
  4. 机器学习(3)高斯判别分析朴素贝叶斯分类器
  5. 新的百亿 IoT 市场:2022年起,新车强制安装EDR!
  6. 哈希算法SHA-512
  7. 排序算法-冒泡排序(可视化动图)
  8. 20110510 Brew工程师培训笔记——第九章 IDisplay使用简介
  9. 创建型设计模式:模板设计模式/观察者设计模式/策略设计模式
  10. currenthashmap底层的CAS原理