
事件循环
发布日期:2021-05-06 20:27:24
浏览次数:22
分类:精选文章
本文共 780 字,大约阅读时间需要 2 分钟。
[回顾]事件循环
JS运行环境概述
JS运行的环境称为宿主环境,这是JS代码执行的基础平台。
执行栈(Call Stack)
执行栈是JS引擎用于管理函数执行的核心数据结构。每当一个函数被调用时,JS引擎会为其创建一个新的执行环境,并将其推送到执行栈顶部。
JS引擎始终执行执行栈最顶部的代码,只有当执行栈完全空置时,才会处理事件队列中的任务。
异步函数与执行时机
异步函数是指不会立即执行,需要等待某个事件到达才能执行的函数。例如,事件处理函数常用异步函数来实现。这些函数的执行时机由宿主环境决定。
浏览器宿主环境中的线程模型
浏览器宿主环境中包含5个主要线程:
- JS引擎线程:负责执行当前执行栈的最顶部代码
- GUI线程:负责页面的渲染工作
- 事件监听线程:用于处理各种事件
- 计时线程:负责时间管理和定时任务
- 网络线程:负责处理网络通信
事件队列与事件循环
当某个线程发现需要执行的事件处理程序时,会将该处理程序添加到一个称为事件队列的内存结构中。
JS引擎在执行栈空置时,会将事件队列中的第一个任务取出,并立即执行。这种机制被称为事件循环。
事件队列的细分
在浏览器中,事件队列主要分为两种类型:
- 宏任务(Macro Task):计时器结束回调、事件回调、HTTP回调等。绝大多数异步函数会被添加到宏任务队列中执行。
- 微任务(Micro Task):MutationObserver(DOM变更观察器)回调、Promise回调等。这些任务通常在宏任务执行完毕后立即被处理。
MutationObserver的作用
MutationObserver是一种DOM观察器,用于监听特定DOM对象的变更情况。它能够实时跟踪页面结构的变化。
事件循环的执行顺序
当执行栈空置时,JS引擎首先会执行微任务队列中的所有任务。如果微任务队列为空,则会执行宏任务队列中的任务。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月15日 08时31分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
《算法导论》第二章笔记
2019-03-06
HTML节点操作
2019-03-06
HTML5新特性
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06
JavaScript中的链式调用
2019-03-06
day-04-列表
2019-03-06
Linux 磁盘管理(df fu fdisk mkfs mount)
2019-03-06
第一类曲面积分
2019-03-06
MySQL锁机制
2019-03-06
Go 数组&切片
2019-03-06
Go 文件操作
2019-03-06
老Python总结的字典相关知识
2019-03-06
vue 不常见操作
2019-03-06
jQuery的事件绑定与触发 - 学习笔记
2019-03-06
Python处理接口测试的签名
2019-03-06
测试流程规范--测试报告模板
2019-03-06
Linux上TCP的几个内核参数调优
2019-03-06
记一次讲故事机器人的开发-我有故事,让机器人来读
2019-03-06
高德算法工程一体化实践和思考
2019-03-06