我以为我理解了this
和箭头功能之间的关系,但下面的片段让我质疑我的理解。
let person = {
name: 'Jim',
sayName: () => {
console.log(this.name);
}
};
person.sayName();
我理解箭头函数捕获封闭上下文的this
值。我期待this
成为对象,而不是Window
。
有人可以帮我理解为什么会这样吗?
答案 0 :(得分:6)
你对箭头函数的理解大多是正确的:箭头函数有一个词法this
,它在箭头函数中的值由周围的范围决定。
您可能认为this
在person
对象字面值中获得了不同的值。 This is not the case
那么让我们看一下this
在你的(全局)范围内引用的内容:
console.log(this === window); // true
let person = {
name: 'Jim',
test: console.log(this === window), // true
sayName: () => {
console.log(this === window); // true
}
};
person.sayName();
如您所见,当创建分配给sayName
的箭头功能时,this
会引用window
对象。
答案 1 :(得分:2)
没有“this”的绑定,所以这是你尝试过的工作版本:
let person = {
name: 'Jimmy the Greek',
sayName: (obj) => {
console.log(obj.name);
}
};
person.sayName(person);
更多内容请阅读Mozilla DEV。
答案 2 :(得分:1)
TLDR;
以这种方式思考,“如果我使用非箭头函数,那将是this
”然后您可以回想起箭头函数中的this
将是更外部的范围{{ 1}}与其对应物相比。
示例强>
this