JS逆向--js事件事件循环和异步(一)"

admin 2026-11-06 03:00:51 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

JS逆向 -- js 事件 事件循环 和异步(一)

逆向有你

2026年11月5日 12:09
河南

去阅读

WEB 逆向基础知识系列

js 事件 · 事件循环 · 和异步

作者:f20171110 | 来源:吾爱破解论坛 | 2026-6-7
全文约 12 万字,篇幅较长,建议先收藏再分次阅读

本文目录

1一 事件的综述

2二 事件的完整生命周期

3三 事件的传播和处理

4四 事件的循环和异步

PART 01

一 、事件的综述

在web逆向  js逆向  前端逆向中,  js语言本身是必须掌握的内容,甚至对于js内部原理和实现的掌握程度,比对普通前端开发者的要求都要高些。 js本身并不难,难点在于 js和js引擎,比如V8,js和js引擎和宿主环境 比如Blink 之间交织在一起。当然,主要重点就是js和V8。  至于这一篇的内容,事件和事件循环,主要是js和宿主环境 Blink 的,但是期约是js原生的。所以这篇文章的第一  第二部分,可以作为浏览性了解,第三部分事件的传播和处理  第四部分循环和异步 可以适当的多了解一下.
事件循环这个时序性的问题,对于web逆向来说,需要了解,但不是重点。

但是,在现阶段,对于开发者来说,不管是哪方面的开发者,js和浏览器方面的知识掌握,都是多多益善。

一 事件的综述

二 事件的完整生命周期

三 事件的传播和处理

四 事件的循环和异步

这四部分已经能覆盖js事件的绝大部分内容了,而且广度和深度都足够。

一二三的完成时间,距离现在时间比较长了, 第四部分是最近完成的,讲解比较通俗易懂,可以重点了解。

首先需要了解几个术语:

宿主环境:将js引擎作为一个组件包含在内,并且为它提供运行所需的资源的外部系统。
就是说,宿主环境提供了所有的资源,比如网络 文件 渲染 各种功能接口等等,没有了宿主环境,     js引擎就是光杆司令,它就只能空转,做不了任何事情。

宿主对象:所有不是由 JS 语言本身定义的、而是由环境提供的对象/功能/api,都叫宿主对象。

比如 Fetch document  XMLHttpRequest    等等 由宿主环境提供的都叫宿主对象。

而js语言定义的对象,比如 Array, Object, Promise, Math, Map 等等,是js的原生内置对象。

我们常说的 事件循环  任务队列 都是由宿主环境提供并且管理的。

说 js能怎样怎样,实际上是  js语言的能力+宿主环境赋予的能力 。

1。  事件的核心定义:

JavaScript 中的事件是宿主环境提供的一套标准化的异步消息分发机制,是系统内发生的、可被代码侦测到的“发生”或“信号” 。

事件是一种能力,那么是不是所有的对象 所有的元素  所有的节点,都具备事件的能力呢?

并不是所有, 这里就要提到一切的源头  事件目标 EventTarget  。

EventTarget是一个接口  是一个对象 ,你要具备事件的能力,必须要实现这个接口。

记得红皮书里讲那个迭代器部分,说要想具备迭代功能,必须实现迭代协议。事件也类似,

EventTarget是宿主环境提供的一种能力 一种功能 一个对象,拥有了它 就拥有了事件的能力。

这里要注意的是,事件 是宿主环境 也就是浏览器提供的,并不是js语言本身所有,这点很重要。

那么,如何获得这种能力呢?

•继承源头 创建一个类 , extends EventTarget ,直接获得原生的正宗事件能力。

•纯手工写

•引入其他事件库

•框架内置

以上所说,是如何获得事件的能力, 而在平常的开发中,绝大部分,都是通过原型链,直接继承了EventTarget ,并不需要特地去获得。

所以,在很多文章中,并没有提到EventTarget,因为单纯从js的角度来说,它处理的元素 节点 对象 等等  都已经通过原型链拥有了  或者通过一些框架内的自定义实现了或者封装了事件的能力。

2。  事件的来源

事件的来源,分两个层面,一个层面  是规范中定义的来源,灵一个层面  是浏览器具体实现的队列。

•规范定义 dom源 ui用户接口源 网络源 导航和历史源 渲染源 这是几个主要的事件来源。

•浏览器的具体实现 浏览器将不同的来源的事件,映射为自己的多个任务队列,并不是完全按照规范中定义的来源来划分宏任务队列的。至于优先级,浏览器有自己的优化和调度策略 比如用户交互高优先 防鸡鹅调度打捞低优先等等。 这些队列,一般来说是依据优先级的大小来划分。 输入事件队列   通常是最高优先级 处理用户的交互,保证用户打字 滚动  点击 没有延迟 计时器事件队列  普通优先级 settimeout  等,  有限的优先级,定时器中的回调函数都放在这里等待执行。(settimeout实际是一个浏览器提供的api函数,它是一个同步执行函数,但是做的是异步调度的工作) 普通事件队列   一般默认优先级 最常用的队列  处理逻辑的主战场  网络  文件  数据  等等 空闲队列   最低优先级 requestIdleCallback 事件循环完全空了   没事做的时候   来这里瞄一眼。

3。 事件和观察者模式

观察者模式是一种软件设计模式。它定义了一种一对多的依赖关系。

•“一” : 指的是被观察者。当它的状态发生改变时,它会对外发送通知。

•“多” : 指的是观察者。它们一直盯着“被观察者”,一旦收到通知,就会自动执行相应的操作。 而事件机制,是对观察者模式的一个实现。 我们写代码时

•DOM 节点(如 button) 就是 被观察者。

•我们写的回调函数(function() { ... }) 就是 观察者。

•addEventListener 就是整个观察者模式的核心api,它安排了一个或多个观察者去盯着被观察者。

•被观察者状态发生改变,触发通知。

4。  事件和DOM事件

可能还是有不少朋友对事件这个概念有疑惑。

事件 是归属于宿主环境的,请记住js语言中 并没有事件的概念。

事件是一个信号,是系统内发生的任何值得注意的事情。比如:键盘按下了、图片加载完了、网络断了、数据到了。。。。。。

DOM 事件只是这个庞大信号系统中的一部分,专门负责网页内容(文档)层面的交互。

之所以把DOM事件单独拿出来说,是因为它是我们在编写代码时,接触最多的一类事件。

...javascript

DOM 事件 是指发生在 HTML 文档元素(节点) 上的特定的交互瞬间。

核心特征: 它们必须依附于某个 DOM 节点(如 ,

    JS逆向--js事件事件循环和异步(一)" 网络安全文章

    JS逆向--js事件事件循环和异步(一)"

    本文深入探讨了JavaScript中的事件机制,包括事件生命周期、事件传播和处理、事件循环和异步编程,旨在帮助开发者更好地理解事件和异步编程在Web开发中的应用。文章涵盖了事件的核心定义、来源、与观察者模式的关系、DOM事件与非DOM事件的区别,以及事件对象的详细解析。
    评论:0   参与:  0