Event Loop详解

2021-05-24  本文已影响0人  天马行空_eaa7

1.知识储备

js引擎首先判断代码是同步还是异步,同步就进入主线程,
异步事件会先进入Event Table并注册为函数
当异步任务指定的事情完成以后,才会将函数移入事件队列中
所以其实事件队列中就是等待被执行的回调函数 (所谓"回调函数"(callback),就是那些会被主线程挂起来的代码。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。)

event-loop10.png

2.JS的运行机制

  1. 所有同步任务都在主线程上执行,形成一个执行栈;

  2. 除了主线程外,还存在一个或多个‘任务队列’,用来存放异步函数;

  3. 一旦‘执行栈’中的所有同步任务执行完毕,系统都会读取 ‘任务队列’ 中有没有任务,如果有,就读取执行,一直循环 读取-执行 操作

3.JS中有两种异步任务

event-loop.png

注意: 微任务永远在宏任务之前执行

4.Event Loop具体执行步骤

注意:Promise中,then中的才是异步的微任务,主体方法是同步任务

eventloop2.png

Event Loop的事件执行顺序图:

event-loop8.jpg

上图可知:

一轮事件轮询中,微任务永远在宏任务之前执行(如果有微任务的话)

5.具体例子

event-loop4.png

例子二(复杂)

event-loop5.png

解析如下:

event-loop6.png event-loop7.png
上一篇 下一篇

猜你喜欢

热点阅读