《深入理解JavaScript闭包和原型》笔记
By XFE-堪玉
以下知识来源于对王福朋所写《深入理解javascript原型和闭包》的理解和整理
-
一切都是对象[引用类型],对象都是通过函数创建的[Funcion类型]
-
对象是属性的集合,因此属性中的方法其实也是属性的一种
-
函数也是一种对象,因此也是属性的集合,可以对其进行自定义属性
-
每个函数都有一个属性prototype,属性值为一个对象——原型对象
-
每个对象都有一个隐式__proto__属性,指向创建该对象的函数的prototype
-
原型对象默认只有一个constructor的属性,指向函数本身
-
Function内置对象的__proto__指向了自身的Prototype,被自身创建
-
自定义或内置函数的prototype本质上和var obj={}一样的Object实例,都是被Object创建,因此根据语言的继承特性,默认原型都会包含一个内部指针,指向Object.prototype,因此Object.prototype里的所有属性和方法被理所应当的继承了下来
-
执行上下文激活相当于代码的"前期准备工作",是在被调用时创建的,其数据内容包括:
-
全局代码的上下文环境
- 变量、函数表达式 ——变量声明(默认赋值为undefined)
- this ——赋值
- 函数声明 ——赋值
-
函数体的上下文环境
- 参数 ——赋值
- arguments ——赋值
- 自由变量 ——赋值
-
-
函数每被调用一次,都会产生一个新的执行上下文环境,执行完后上下文环境即被销毁
-
作用域是在函数创建时就产生的,同一个作用域下可能同时存在不同的执行上下文
-
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了
-
处于活动状态的执行上下文环境只有一个,其实这是一个压栈出栈的过程——执行上下文栈
-
在当前作用域中使用,却没在当前作用域中创建的变量为自由变量
-
对于自由变量的取值,要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”
XFE——星城前端
XingCheng FrontEnd

浙公网安备 33010602011771号