JS记录

JavaScript

原文链接https://juejin.im/post/5c64d15d6fb9a049d37f9c20

1. 原型/构造函数/实例

  • 原型:一个简单对象,用于实现对象的继承属性

  • 构造函数:通过 new 来新建一个对象的函数。

  • 实例:通过构造函数和 new 创建出来的对象。

2. 原型链

  • 原型链是由原型组成。是一个用来实现继承和共享属性的有限的对象链。
  • 属性查找机制:当查找对象的属性是,如果实例对象自身不存在该属性,则沿着原型链往上一级查找,直至最顶级的 Object.prototype。如果没找到,则输出 undefined
  • 属性修改机制:只会修改实例对象本身的属性,不存在则添加,存在则修改。

3. 执行上下文

执行上下文可以简单理解成一个对象:

  • 它包含三部分:

    1. 变量对象(VO)
    2. 作用域链(词法作用域)
    3. this 指向
  • 它的类型

    1. 全局执行上下文
    2. 函数执行上下文
    3. eval 执行上下文
  • 代码执行过程

    1. 创建 全局上下文(global EC)
    2. 全局执行上下文(caller)逐行 自上而下 执行。遇到函数时,函数执行上下文(callee) 被 push到执行栈顶层。
    3. 函数执行上下文被激活,成为 active EC,开始执行函数和的代码,caller 被挂起。
    4. 函数执行完后,callee 被 pop移除执行栈,控制全交换全局上下文(caller),继续执行。

3.1 变量对象

变量对象:是执行上下文中的一部分,可以抽象为一种数据作用域,其实也可以理解为就是一个简单的对象,它储存着该执行上下文中的所有 变量和函数声明(不包括函数表达式)。

活动对象(AO):当变量对象所处的上下文为 active EC 时,称为活动对象。

3.2 作用域

作用域 可以理解为该上下文声明的 变量和声明的作用范围。可分为 块级作用域函数作用域

特性:

  • 提前声明:一个声明在函数体内都是可见的,函数优先于变量
  • 费匿名自执行函数,函数变量为 只读状态,无法修改。

4. 闭包

闭包属于一种特殊的作用域,成为静态作用域

它可以理解为:父函数被销毁的情况下,返回出的子函数中仍然保留着父级作用域的变量和作用域,因此可以继续访问到父级的变量对象,这样的函数成为闭包。

  • 闭包会产生的问题:
    多个子函数都同时指向父级,父级的状态是完全共享的。一次当父级的变量对象被修改是,所有子函数都受到影响。

5. script 引入方式

  • html 静态

你可能感兴趣的:(JS记录)