《深入理解JavaScript闭包和原型》笔记

时间:2021-08-18 16:33:08

By XFE-堪玉


以下知识来源于对王福朋所写《深入理解javascript原型和闭包》的理解和整理

  1. 一切都是对象[引用类型],对象都是通过函数创建的[Funcion类型]

  2. 对象是属性的集合,因此属性中的方法其实也是属性的一种

  3. 函数也是一种对象,因此也是属性的集合,可以对其进行自定义属性

  4. 每个函数都有一个属性prototype,属性值为一个对象——原型对象

  5. 每个对象都有一个隐式__proto__属性,指向创建该对象的函数的prototype

  6. 原型对象默认只有一个constructor的属性,指向函数本身

  7. Function内置对象的__proto__指向了自身的Prototype,被自身创建

  8. 自定义或内置函数的prototype本质上和var obj={}一样的Object实例,都是被Object创建,因此根据语言的继承特性,默认原型都会包含一个内部指针,指向Object.prototype,因此Object.prototype里的所有属性和方法被理所应当的继承了下来

  9. 执行上下文激活相当于代码的"前期准备工作",是在被调用时创建的,其数据内容包括:

    • 全局代码的上下文环境
      1. 变量、函数表达式 ——变量声明(默认赋值为undefined)
      2. this ——赋值
      3. 函数声明 ——赋值
    • 函数体的上下文环境
      1. 参数 ——赋值
      2. arguments ——赋值
      3. *变量 ——赋值
  10. 函数每被调用一次,都会产生一个新的执行上下文环境,执行完后上下文环境即被销毁

  11. 作用域是在函数创建时就产生的,同一个作用域下可能同时存在不同的执行上下文

  12. 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了

  13. 处于活动状态的执行上下文环境只有一个,其实这是一个压栈出栈的过程——执行上下文栈

  14. 在当前作用域中使用,却没在当前作用域中创建的变量为*变量

  15. 对于*变量的取值,要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”