浏览器中的 事件循环 event loop

当浏览器碰到异步代码:异步代码会放到队列。队列有两种。微任务队列和宏任务队列。

执行栈与任务队列
JS 在解析一段代码时,会将同步代码按顺序排在某个地方,即执行栈,然后依次执行里面的函数。

当遇到异步任务时就交给其他线程处理,待当前执行栈所有同步代码执行完成后,会从一个队列中去取出已完成的异步任务的回调加入执行栈继续执行,遇到异步任务时又交给其他线程,…,如此循环往复。

而其他异步任务完成后,将回调放入任务队列中待执行来取出执行,


JS 按顺序执行执行栈中的方法,每次执行一个方法时,会为这个方法生成独有的执行环境(上下文context),待这个方法执行完成后,销毁当前的执行环境,并从栈中弹出此方法(即消费完成),然后继续下一个方法。

 

在事件驱动的模式下,至少包含了一个执行循环来检测任务队列是否有新的任务。通过不断循环去取出异步回调来执行,这个过程就是事件循环,而每一次循环就是一个事件周期或称为一次tick。

 

部分内容copy与其他作者。

 

我理解的事件循环一个代码执行周期。 先执行同步代码。碰到宏任务就加入。碰到微任务也加入。如果同时完成。微任务优先。

 

posted @ 2024-10-21 11:39  七分sunshine!  阅读(8)  评论(0编辑  收藏  举报