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

By XFE-堪玉javascript


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

  1. 一切都是对象[引用类型],对象都是经过函数建立的[Funcion类型]闭包

  2. 对象是属性的集合,所以属性中的方法其实也是属性的一种函数

  3. 函数也是一种对象,所以也是属性的集合,能够对其进行自定义属性this

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

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

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

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

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

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

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

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

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

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

  14. 在当前做用域中使用,却没在当前做用域中建立的变量为自由变量

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

相关文章
相关标签/搜索