深度理解JavaScript原型和闭包

本文只是大纲总结,方便之后的知识点梳理。

大纲总结

  1. 一切(引用类型)都是对象,对象是属性的集合。

  2. 对象都是由函数创建的,而函数也是一种对象

  3. 函数的自带属性prototype,它也是一个对象

  4. 对象的__proto__属性,指向了构造函数的prototype,但是Object.prototype__proto__指向了null

  5. Function是被自身创建的,它的__proto__指向了自身的prototype

  6. 值类型的typeof,引用类型的instanceof

    A instanceof B
    // A 是一个对象
    // B 一般是一个函数
    

    instanceof的判断规则:沿着A 的__proto__这条线路来找,同时沿着B.prototype这条线路来找,如果两条线能找到同一个指引,那么就返回true,如果终点未能重合就返回false.

  7. javascript的继承是通过原型链来实现的。

  8. 访问一个对象的属性的时候,首先会在基本属性中寻找,如果没有,就会沿着原型链__proto__继续向上寻找,这就是原型链

  9. 在js真正执行的时候,浏览器还需要做一些准备工作

    • 变量提升,并默认赋值为undefined
    • this的赋值
    • 函数申明
  10. 函数每一次执行的时候,都会创建一个新的执行上下文,做好函数执行的准备工作。

  11. 函数在创建的时候(不是在调用的时候),就已经确定了函数内部自由变量的作用域。

  12. 处于活动状态的执行上下文环境只有一个。

  13. 自由变量: 在自己作用域使用了自己作用域没有声明的值(即在其他作用域中申明了)。

  14. 函数取自由变量的时候,要到创建它的作用域链上取,而不是调用。

  15. 闭包运用的2中情况:

    • 函数作为返回值
    • 函数作为参数传递
  16. 作用域和上下文环境

    • 作用域:全局作用域和块级作用域以及函数作用域都是在创建的时候形成,不管你调不调用,只要创建了,就会形成它独有的作用域,就有一个自己的”地盘“。
    • 上下文环境: 在函数调用的时候,就会生成自己的上下文环境,用于传递参数和赋值。
    • 二者联系: 一个作用域内部可能会出现多个上下文环境。

你可能感兴趣的:(深度理解JavaScript原型和闭包)