this 的建立#
- 一般函数在预编译过程中生成的 AO 上下文
- AO 中除了函数内的一些属性和函数参数外,还有
arguments和this(箭头函数没有)。 - 所以函数(除了箭头函数)预编译过程会生成
this隐式对象,并 默认指向 window。
this 指向#
- 而在预编译过程中,
this会默认指向window。 - 而
new操作时,会在函数内生成一个隐式this对象,而同时改变 AO 中this指向为本this - 用
obj.func()调用的时候,会将func()内的this指向改为obj
以上this的修改是在func有this的情况下,箭头函数没有 this,直接沿着作用域链向上寻找 this
注意函数作用域链的数据是由函数参数、函数内声明组成,fun.prop 无法 增加或更改作用域
this 规则概括#
- 函数编译过程中 AO 上下文中
this默认指向window - 全局作用域里
this指向window call/apply可以利用参数改变this的指向obj.fun()调用时,fun()AO 中this指向 obj (new生成对象时默认return this,所以只有this.xxx的属性才能被访问到)- html 元素脚本中,函数参数中的
this指向元素本身