JavaScript中的事件循环(event loop)机制

事件循环(event loop)过程:

 

一、执行同步(轮询)阶段:

1.同步代码,一行一行放在Call Stack(调用栈)执行

2.遇到异步,会先记录到Web APIs里,然后等待时机(定时器、网络请求等)

3.时机到了,就移动到Callback Queue(回调队列)

4.当Call Stack(调用栈)清空时,先尝试DOM渲染,再进入事件循环(event loop)阶段

 

二、执行当前的微任务阶段

 

三、DOM渲染阶段

 

四、事件循环(event loop)阶段,执行当前的宏任务:

1.Call Stack(调用栈)为空(即同步代码执行完),微任务执行完,DOM渲染结束,事件循环(event loop)开始工作

2.事件循环(event loop)轮询查找Callback Queue(回调队列),如查找到任务则移动到Call Stack(调用栈)同步执行(轮询)

3.然后继续循环查找,直到查找到任务然后移动到Call Stack(调用栈)同步执行(轮询)

 

五、四个阶段不断循环:

1.每次Call Stack(调用栈)清空(即每次轮询结束,一个同步代码执行阶段就是一个轮询),微任务执行完,都是DOM渲染的时机,DOM结构如有改变则重新渲染,然后触发下一次事件循环(event loop)

2.如果事件循环(event loop)在Callback Queue(回调队列)内查找到任务且移动到Call Stack(调用栈)并同步执行(轮询)完毕,这时Call Stack(调用栈)又清空,又会执行微任务,尝试DOM渲染,然后又进入事件循环(event loop)阶段,执行同步(轮询)、执行微任务、DOM渲染、事件循环(event loop)四个阶段不断循环

 

posted @ 2021-05-07 21:33  starlog  阅读(805)  评论(0编辑  收藏  举报