资讯专栏INFORMATION COLUMN

JavaScript事件循环(Event Loop)

dmlllll / 3166人阅读

摘要:事件循环的顺序,决定代码执行的顺序。输出第二轮事件循环正式结束三第三轮事件循环第三轮事件循环从宏任务开始。记为遇到,立即执行回调函数放入中注册,然后被分发到微任务事件队列中。

1、为什么要有事件循环?

因为js是单线程的,事件循环是js的执行机制,也是js实现异步的一种方法。

既然js是单线程,那就像只有一个窗口的银行,客户需要排队一个一个办理业务,同理js任务也要一个一个顺序执行。如果一个任务耗时
过长,那么后一个任务也必须等着。那么问题来了,假如我们想浏览新闻,但是新闻包含的超清图片加载很慢,难道我们的网页要一直卡着
直到图片完全显示出来?因此聪明的程序员将任务分为两类:

同步任务

异步任务

当我们打开网站时,网页的渲染过程就是一大堆同步任务,比如页面骨架和页面元素的渲染。而像加载图片音乐之类占用资源大耗时久的任务,
就是异步任务。

2、宏任务与微任务

JavaScript中除了广泛的同步任务和异步任务,我们对任务有更精细的定义:

macro-task(宏任务): 包括整体代码scriptsetTimeoutsetInterval

micro-task(微任务): Promiseprocess.nextTick

不同的类型的任务会进入不同的Event Queue(事件队列),比如setTimeout、setInterval会进入一个事件队列,而Promise会进入
另一个事件队列。

一次事件循环中有宏任务队列和微任务队列。事件循环的顺序,决定js代码执行的顺序。进入整体代码(宏任务-
3、分析更复杂的代码
一、第一轮事件循环
a)、整段                
阅读需要支付1元查看
<