this
是很多人容易混淆的概念,但是其实一点也不难,只要理清几个规则就可以了
function fn() {
console.log(this.a);
}
var a = 1
fn()
var obj = {
a: 2,
fn: fn
}
obj.fn()
// 以上2中情况,`this` 只依赖于调用函数前的对象,第二个优先级 大于 第一个优先级
// 下面情况中,this 的优先级最高,a只会绑定到c 上,this 不会有任何方式改变它的指向
var c = new fn()
c.a = 3
console.log(c.a);
// 还有就是利用 call, apply, bind 改变this的指向,这个优先级仅次于 new
- 以上的情况明白了,
this
基本上就没有什么问题了,下面我们了解箭头函数中的this
function b() {
return () => {
return () => {
console.log(this)
}
}
}
console.log(b()()())
箭头函数其实是没有
this
的,这个函数中的this
只取决于他外面的第一个不是箭头函数的函数的this
,这个函数因为符合第一个情况,所以他的this
是 指向window
的。并且this
一旦绑定了上下文,就不会被任何代码更改了。