JS
文章平均质量分 68
「已注销」
这个作者很懒,什么都没留下…
展开
-
JS - 捕获打印窗口关闭事件
实际上浏览器没有标准化的打印窗口关闭事件,但是根据js单线程这一特性,我们可以在打开打印窗口时同时执行一个异步函数,这样异步函数将被阻塞直到窗口关闭,通用于任何窗口。原创 2022-09-07 12:00:29 · 1554 阅读 · 1 评论 -
JS - 规范下的 this
阅读本文请先查看执行上下文规范定义:this 关键字: 返回 ResolveThisBinding()只有function Environment Record(非箭头函数), module Environment Record 以及 global Environment Record的 HasThisBinding() 返回 true, 其它为 falseGetThisBinding():function Environment Record(非箭头函数)[[ThisBindingStatu原创 2021-05-31 17:47:15 · 130 阅读 · 0 评论 -
JS - 从规范解读浏览器事件循环
前言在讨论事件循环之前,其实是想介绍 V8 引擎与浏览器之间的联系,奈何学艺不精,网上的资料也是参差不齐,所以不敢侃大山。不过还是可以确定以下几点:浏览器提供了 JS 代码运行的额外环境,如 window 对象、事件循环模型。V8 引擎只负责执行 JS 代码,即调用栈中有啥就执行啥,至于代码什么时候、什么顺序入栈由浏览器控制。事件循环的作用众所周知,JavaScript 是单线程运行的,这就意味着执行像 setTimeout 中的回调函数,如果没有一个机制让代码继续执行,那么 JS 程序只能原创 2021-04-25 11:29:18 · 177 阅读 · 0 评论 -
JS - 规范定义的执行上下文
本文根据ES6 规范关于执行上下文的内容来解读 JavaScript 程序运行的实际情况。Lexical Environments(词法环境)在论述执行上下文之前,我们需要了解一个概念:词法环境。A Lexical Environment is a specification type used to define the association of Identifiers to specific variables and functions based upon the lexical nest原创 2021-04-25 11:29:24 · 418 阅读 · 2 评论 -
JS - 原型及原型链
new 操作符先让我们看一段简单的代码:function Test() { this.a = "a"; this.b = "b";}const instance = new Test();new 操作符做了什么?引用MDN的说法:创建一个空白且简单的 JavaScript 对象。通过new Object()创建一个空白对象。链接该对象到另一个对象。为步骤 1 创建的对象添加__proto__属性指向原型。得到{ __proto__: Test.prototype }。原创 2021-04-25 11:29:40 · 154 阅读 · 0 评论 -
JS - 垃圾回收机制
垃圾回收由 JS 引擎实现, 对于我们来说是无法接触的建议查看垃圾回收可达性可达性: 通过执行上下文链判断内存中的数据是否被引用 (执行上下文可查看我写的文章)通过判断可达性决定内存中的数据是否可以被清除例子var obj = {};如果了解 C 语言指针以及计算机系统, 那么很容易知道:上面的声明实际是在堆内存开辟了空间存储复杂数据 {}, 分配的内存地址我们假设为 0x0001那么 obj 指向栈内存, 存储的值为数据 {} 的地址, 即 0x0001备注: 复杂数据即数据长度不确原创 2021-05-25 15:10:45 · 146 阅读 · 2 评论 -
JS - 对象获取 Keys 的不同方法
以下面代码为例:const obj = {};Reflect.defineProperty(obj, "test1", { configurable: true, enumerable: true, value: 1, writable: false,});Reflect.defineProperty(obj, Symbol("test1"), { configurable: true, enumerable: true, value: 1, writable: fa原创 2021-05-25 10:37:06 · 938 阅读 · 0 评论