📄️ 原型与原型链
JavaScript 中的每个对象都有一个原型 (prototype) 属性,它指向另一个对象,这个对象的属性和方法可以被继承。如果在一个对象上调用一个属性或者方法,而这个对象本身没有这个属性或者方法,那么 JavaScript 就会从它的原型对象上查找这个属性或者方法,如果原型对象上也没有找到,则会继续查找原型对象的原型对象,直到找到 Object.prototype 为止,如果还没有找到,那么这个属性或者方法就是 undefined。
📄️ 词法作用域和动态作用域
JavaScript 中的作用域指的是代码中声明变量的可见性和访问权限。在 JavaScript 中,作用域可以分为词法作用域和动态作用域两种。
📄️ 执行上下文栈
JavaScript 中的执行上下文栈(Execution Context Stack),也称为调用栈(Call Stack),是一种用于管理和追踪代码执行的机制。当 JavaScript 引擎执行代码时,会创建一个全局执行上下文,并将其推入执行上下文栈的底部。接着,在执行代码的过程中,如果遇到函数调用,JavaScript 引擎会为该函数创建一个新的执行上下文,并将其推入执行上下文栈的顶部。函数执行完毕后,该函数对应的执行上下文会被弹出执行上下文栈,控制权会返回到调用该函数的上一层执行上下文。
📄️ 变量对象
在 JavaScript 中,变量对象(Variable Object)是指在执行上下文创建阶段被创建的一个特殊对象,它用来存储当前执行上下文中的变量、函数声明和函数参数等信息。在执行上下文创建完毕后,变量对象会被添加到作用域链的顶部,成为当前执行上下文的活动对象(Active Object)。
📄️ 作用域链
作用域链(Scope Chain)是 JavaScript 中非常重要的一个概念,它是用来解决变量访问权限和可见性的机制。在 JavaScript 中,每个函数都会创建一个新的执行上下文,每个执行上下文都有自己的作用域链。作用域链是由当前执行上下文的变量对象和上层执行上下文的作用域链组成的。
📄️ 从ECMAScript规范解读this
在 JavaScript 中,this 是一个关键字,用来引用当前函数的执行上下文(Execution Context)中的对象。this 的值在函数调用时确定,并且在每个函数中都是不同的,它的值取决于函数的调用方式和上下文。
📄️ 执行上下文
在 JavaScript 中,执行上下文(Execution Context)是一个抽象的概念,它是 JavaScript 引擎在执行代码时创建的一个环境,用来存储代码执行过程中的所有信息,包括变量、函数、作用域、this 等信息。
📄️ 补充:通过动图了解JS中的ECStack、EC、VO 和 AO
前言
📄️ 闭包
闭包(closure)是指有权访问另一个函数作用域中的变量的函数,即使该函数已经执行完逻辑并返回。
📄️ 参数按值传递
在 JavaScript 中,参数传递也是按值传递的。这意味着,函数在调用时会复制传递给它的参数值,然后将这些副本作为参数传递给函数。
📄️ call和apply的模拟实现
call 和 apply 是 JavaScript 中的两个函数方法,它们可以改变函数的上下文(即 this 指向)并立即执行该函数。它们的实现方式非常类似,只是传递参数的方式略有不同。下面是 call 和 apply 的模拟实现:
📄️ bind的模拟实现
bind 方法是 JavaScript 中函数的一个方法,它可以创建一个新函数,并将这个新函数的 this 值绑定到指定的对象上。同时,bind 方法还可以预先传递一些参数给新函数,这些参数在新函数被调用时会被传递给原始函数。下面是 bind 方法的模拟实现:
📄️ new的模拟实现
new 关键字是 JavaScript 中用于创建对象的一种方法。通过 new 关键字创建对象时,会调用一个构造函数,并将其作为对象的初始化函数。同时,new 关键字还会将新创建的对象的原型指向构造函数的原型,从而实现继承。下面是 new 关键字的模拟实现:
📄️ 类数组对象与arguments
JavaScript 中的类数组对象是指具有类似于数组的结构和特性(例如可以按索引访问元素、具有 length 属性等),但并不是真正的数组对象。常见的类数组对象包括函数的 arguments 对象、DOM 元素集合(如 document.getElementsByTagName() 返回的结果)、以及 NodeList 等。
📄️ 创建对象的多种方式以及优缺点
在 JavaScript 中,我们可以使用多种方式来创建对象,每种方式都有其自身的优缺点,具体如下:
📄️ 继承的多种方式和优缺点
在 JavaScript 中,有多种继承方式可以实现对象之间的继承。下面是常见的几种继承方式及其优缺点:
📄️ 浮点数精度
JavaScript 中的浮点数采用 IEEE 754 标准表示,它是一种二进制表示法,将一个实数分为符号位、指数位和尾数位三个部分。在 JavaScript 中,浮点数的精度是有限的,这是由于计算机在表示浮点数时采用了二进制表示法,而二进制无法准确地表示一些十进制的小数,例如 0.1 和 0.2,因此在进行浮点数计算时可能会出现精度丢失的情况。
📄️ 类型转换(上)
JavaScript 是一种弱类型语言,它允许在运行时进行类型转换。在 JavaScript 中,有以下几种类型转换方式:
📄️ 类型转换(下)
前言