箭头函数的词法范围行为不符合预期

时间:2018-06-30 04:32:52

标签: javascript ecmascript-6 scope arrow-functions

箭头函数具有绑定的词法范围。因此,在此代码中,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());

1 个答案:

答案 0 :(得分:4)

行为符合预期。因为它是一个箭头函数,所以调用上下文是从外部 scope (定义了person的块,其中this引用了全局对象)继承而来的从嵌套了person1的外部 object 中提取。调用sayName时不会捕获任何调用上下文,并且对象初始化器(可能嵌套)不会创建新的作用域。