普通函数function(){}
-
全局环境下,无论是否严格模式,this始终指向全局对象(windows)
-
普通函数的this,分两种情况,即严格模式和非严格模式
-
非严格模式下this指向全局对象(windows)
-
严格模式下 this指向undefined
-
-
对象中的this
- 对象内部方法的this指向调用方法的对象
-
原型链中的this
- 原型链中的this指向调用它的对象
-
构造函数中的this
- 构造函数中的this与被创建的新对象绑定。
-
call 和 apply,强制改变this指向
- 当函数通过Function对象的原型中继承的方法 call() 和 apply() 方法调用时, 其函数内部的this值可绑定到 call() & apply() 方法指定的第一个对象上, 如果第一个参数不是对象,JavaScript内部会尝试将其转换成对象然后指向它。
箭头函数 ()=>{}
- 指向箭头函数定义时所处的对象,而不是箭头函数使用时所在的对象,默认使用父级的this
- 如果父级也是箭头函数,则再往上找,直至找到window
- 并且箭头函数没有this,所以无法使用call和apply
- 总结:箭头函数的this是向外层作用域中一层一层的查找的,直到有this的定义