箭头函数的this指向可以一句话概括,箭头函数的this指向箭头函数的命名空间(命名空间的this指向哪就指向哪,命名空间就两个地方一个window一个就是函数体)
看下面几个列题就完全明白了
var x = 11;
var obj = {
x: 22,
methods: {
x: 33,
say: function () { console.log(this.x) },
say2: () => { console.log(this.x) },
say3: function () {
let say4 = () => {//箭头函数命名在say3里面
console.log(this.x)
}
console.log(this.x)
say4()
}
}
}
obj.methods.say();//33
obj.methods.say2();//11
obj.methods.say3();//33
var b=obj.methods.say3()//33
var a = obj.methods.say3//函数赋值给a上下文改变
a()//this指向全局所以箭头函数命名空间为window
列题二
var obj1={
num:4,
fn:function(){
var f=function(){
console.log(this); //window,因为函数f定义后并没有对象调用,this直接绑定到最外层的window对象
setTimeout(() => {
console.log(this);//window,外层this绑定到了window,内层也相当于定义在window层(全局环境)
});
}
f();
}
}
obj1.fn();