箭头函数作用域与常规函数作用域

时间:2020-01-08 14:29:22

标签: javascript

我已经阅读了Java语言中的箭头功能常规功能之间的区别,因此我做了一个小小的node.js演示项目来了解我已经做过的事情。学到的。

let name = 'file Scope'

class User {
   name = "Class Scope"
   arrow = () => {
       console.log("Arrow name " + this.name);
   }
   normal() {
       console.log("Normal name " + this.name);
   }
   test() {
       return {
           name: "Object Scope",
           n: this.normal,
           a: this.arrow,
           nested: {
               name: 'Nested Object Scope',
               nestedNormal: function () {
                   console.log("Nested Normal " + this.name);
               },
               nestedArrow: () => {
                   console.log("Nested Arrow " + this.name);
               }
           }
       }
   }
}
let user = new User();

user.test().n(); //Normal name Object Scope
user.test().a();//Arrow name Class Scope
user.test().nested.nestedNormal();//Nested Normal Nested Object Scope
user.test().nested.nestedArrow();//Nested Arrow Class Scope

没有控制台输出,我认为 nestedArrow()函数将返回 Object Scope ,但否则返回 Class Scope

为什么“ this.name”是引用类中的名称而不是嵌套对象内部的名称?

1 个答案:

答案 0 :(得分:1)

箭头函数在test()函数内部声明,因此它从该函数获取this的值。

您呼叫了user.test(),因此在test内,this的值与user的值相同。

user.name"Class Scope"

进一步阅读:Self-references in object literals / initializers