首先来一道题目
var go =console;
var langue ={
name: '',
php(){
var t = this;
go.info(t.name);
},
python: () =>{
let t = this;
go.info(t.name);
}
};
langue.php(); //输出空
langue.python();//输出空
第一个输出其实是langue.name;很好理解这种函数声明,this指向langue
第二个输出其实是Window.name;
我们经常能看到箭头函数this的举例是在setTimeout等回调函数中展示,内部的this就是定义时上层作用域中的this。
而如果在方法中使用箭头函数呢?
再来一道题
var x = 11;
var obj = {
x: 22,
methods: {
x: 33,
say: function () { console.log(this.x) },
say2: () => { console.log(this.x) }
}
}
obj.methods.say(); //33
obj.methods.say2(); //11
显而易见,在方法中使用箭头函数时,就不是简单的指向“外面”的this,是一种例外的情况
总结
- 作为方法的箭头函数this指向全局window对象
解释
根据阮一峰的解释,在方法中使用箭头函数是不合适的,这是因为对象不构成单独的作用域,导致方法中的箭头函数定义时的作用域就是全局作用域。