《JavaScript 核心原理解析》学习笔记
莫得感情学习机1号
这个作者很懒,什么都没留下…
展开
-
《JavaScript 核心原理解析》学习笔记 Day 15 this 对象实例的创建
在JavaScript 中,类和一般的构造器函数创建对象实例 this 的过程并不完全相同。首先,函数的 prototype 属性是可修改的。当它被修改为 null 时,其子类对象是以 null 为原型的;当它被修改为非对象值时,其子类对象是以 Object.prototype 为原型的;而当它是一个对象类型的值时,其子类会使用该对象作为原型来创建实例。原创 2023-01-30 18:20:20 · 3150 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 14 new 构造器
最早的 JavaScript 没有继承。JavaScript 1.0 中可以将函数作为构造器,并且在函数中向它的实例(也就是 this 对象)抄写类声明的那些属性。构造器函数即为类,而被创建出来的实例即为对象。JavaScript 一方面使用了类继承的基础结构和概念,另一方面又要实现原型继承和基于原型链检查的逻辑。instanceof 运算被实现为一个动态地访问原型链的过程,它将从对象所属类的 prototype 属性逆向地在原型链中查找指定的原型,因此能确定某个对象是否是某个类本身或其子类的实例。原创 2023-01-29 23:07:35 · 1319 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 13 作用域 对象
在JavaScript 中,向没有声明的变量名赋值,会隐式地创建一个全局变量;全局变量会被绑定为全局对象(global)的属性。因此,JavaScript 的变量环境(或者全局环境)与对象系统就关联了起来。而对象闭包和函数闭包实现的环境被称为域(Scope)。所谓“使用 with 语句创建一个对象闭包”就简单地被实现为“向既有的作用域链尾加入一个新的 scope”。原创 2023-01-28 23:10:51 · 1060 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 12 ECMAScript 中语句执行和表达式执行的统一
ECMAScript 的目的是描述引擎如何实现,而不是描述语言是什么。在 JavaScript 语言层面,引擎是一个执行器,引擎的核心是一个表达式计算的、连续的执行过程。所以,JavaScript 的语句执行,本质上也是一个或一组表达式计算过程,而且所有的计算都必须能描述成“用操作符去处理操作数”这一基本的模式。即执行过程最终是表达式计算。而计算则有其返回,语句执行返回完成记录,表达式执行返回引用记录。原创 2023-01-27 23:09:12 · 392 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 11 throw 语句完成状态与返回值
在 JavaScript 中,语句有五种完成状态(normal, break, continue, return, 以及 throw)。Nomal(缺省状态)大多数情况下是不被读取的;break 和 continue 用于循环和标签化语句,不携带返回值;return 则是用于函数的返回值;throw(异常抛出)不拦截捕获会终止程序运行。其中 return 和 throw 两个状态是确保返回时携带有效值(包括 undefined)的;其他的完成类型则可能在返回时携带空值(empty)。原创 2023-01-26 23:35:49 · 755 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 10 yield 生成器函数与执行上下文
生成器函数被调用后,并不会直接执行函数体中的内容,只是生成一个暂停状态的迭代对象。调用迭代对象的 next 方法后,才开始执行函数体中的内容。在执行到 yield 时,生成器函数会暂停挂起,直到下一次调用迭代对象的 next 方法才会继续执行之后的内容。另外,yield 作为表达式时,其值为下一次调用 next 方法时传入的值。原创 2023-01-25 22:46:07 · 201 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 9 ... 展开语法 迭代
在JavaScript中,... 常被称为扩展运算符或展开运算符,但 ...x 不是表达也不是语句。... 是展开语法,在语义上用来展开一个可迭代的对象。在 ...x 中,x 是可迭代对象,并且会通过一个迭代变量来管理其迭代过程。而迭代过程,并不是一个语法执行的过程,可以理解为一组函数执行的过程。其结束行为也就可以理解为函数内的异常或退出。迭代过程中,退出 (return)是执行过程的,而异常 (throw)是外部的。原创 2023-01-24 22:49:23 · 125 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 8 函数中的变量与执行
在JavaScript中,从静态视角来看,函数是由参数、执行体、结果这三个语义组件构成的实体。而当函数内声明的变量的名称与其形参名称重复时,var 声明并不会创建新的变量,仅发生赋值;而 let 声明会在函数声明时就报错,提示标识符已被声明过。函数不可使用与形参相同名称的变量作为参数缺省时的默认值,虽然函数仍能成功声明,但调用时缺省参数会报错。因为函数内部会以形参名称声明变量,在根据传入值进行初始化前,这些变量是不可访问的。其默认值使用与形参相同名称的变量时,其访问的就是函数内未完成初始化的变量,即会报错。原创 2023-01-23 23:32:22 · 125 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 7 可执行结构 模板 函数参数
JavaScript 中的模板,是除语句和表达式以外的另一种可执行结构。函数参数也是一种可执行结构,包括缺省参数、剩余参数和参数展开。另外,模板字面量可用于触发函数执行(一般不这么做),并且会作为函数参数传入。原创 2023-01-22 23:45:58 · 89 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 6 中断与标签 break label
JavaScript 中的break 可中断循环语句和 switch 语句,其效果是跳转到下一语句。而带标签的 break label 可用在被 label 标记的块语句中。并且对于 if / else if / else 语句和 try / catch / finally语句而言,其每一个块中都可以使用标记到 if 或 try 的 break label。在函数内的try / catch / finally语句中使用 break 时,其会在函数 return 前执行。原创 2023-01-21 23:45:07 · 215 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 5 块级作用域
JavaScript 中的块级作用域,除 with 语句和 for 语句外,基本可以通过大括号 {} 分辨。若在循环语句中使用大括号,则会生成对应循环次数的块级作用域。但for 循环语句中不使用大括号也可能(不是一定)会生成块级作用域。在 for 循环的条件中无变量声明或使用 var 声明变量,不会生成块级作用域;使用 let /const 声明变量 / 常量时,则会生成与循环次数相对应的块级作用域。原创 2023-01-20 23:47:12 · 183 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 4 声明语句与对象中函数 function 的名称 name
在 JavaScript 中,有具名函数和匿名函数之分,匿名函数即其name属性为空字符串。通过 var 使用变量声明函数时,若声明语句右侧函数表达式中的函数为匿名函数,则最终声明的可访问函数的名称为左侧的声明的变量名;若声明语句右侧函数表达式中的函数为具名函数,则最终声明的可访问函数的名称为右侧具名函数的函数名,并且无法通过右侧的函数名访问最终声明的函数。在对象生成时通过字面量添加的函数属性,其名称表现基本同声明语句;但之后通过变量名访问对象添加函数属性时,其函数的名称完全由右侧的函数表达式决定。原创 2023-01-19 23:18:39 · 196 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 3 连续表达式中的引用
在连续表达式中,JavaScript 的计算方向是从左到右的。所以在表达式中进行连续赋值时,左侧已计算完毕的引用并不会随右侧的赋值表达式运算而更新。原创 2023-01-18 23:38:59 · 102 阅读 · 0 评论 -
《JavaScript 核心原理解析》学习笔记 Day 2 未声明变量 变量声明与词法声明
六种声明用语句:let、const、var、function、class、import。变量声明(varDelcs)与词法声明(lexicalDecls)。var 声明的变量不能用 delete 删除,但被赋值的未声明变量可用 delete 删除。eval() 中使用 var 声明的变量可以通过 delete 删除。词法名字列表(lexicalNames 列表)中的项都是不可移除的,也就无法通过 delete 删除。原创 2023-01-17 23:46:51 · 1155 阅读 · 1 评论 -
《JavaScript 核心原理解析》学习笔记 Day 1 delete 引用与值
在 javaScript 中一个表达式的值或者说结果,可能是引用 / 值。所以 x = x ,是将右侧表达式x的值赋值给左侧表达式x所指的引用。注意此处的引用并非为到具体内存地址的指向,而是指表达式与其值的一种关联。delete 仅会对于对象的属性生效。区分清楚其作用的对象和属性即可确定其效果。另外对于null 和 undefined 进行 delete 操作时,表现不同。因为 null 是一个关键字,直接对应到值;而undefined 是一个只读的全局变量,是通过引用获取到值 undefined。原创 2023-01-16 23:00:54 · 221 阅读 · 0 评论