箭头函数具有绑定的词法范围。因此,在此代码中,person.person1.sayName()
应该输出HB
,但它输出GOT
(全局范围)。为什么会这样?
var name = "GOT";
var person = {
name : "HB",
sayName : function() { return this.name },
person1 : {
name : "WW",
sayName : () => this.name
}
};
console.log(person.person1.sayName());
答案 0 :(得分:4)
行为符合预期。因为它是一个箭头函数,所以调用上下文是从外部 scope (定义了person
的块,其中this
引用了全局对象)继承而来的从嵌套了person1
的外部 object 中提取。调用sayName
时不会捕获任何调用上下文,并且对象初始化器(可能嵌套)不会创建新的作用域。