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指向元素本身