簡體   English   中英

箭頭函數作用域 vs 常規函數作用域

[英]Arrow function scope vs regular function scope

我已經閱讀了 JavaScript 中箭頭函數常規函數之間的區別,因此我制作了一個小 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”指的是類中的名稱而不是嵌套對象內部的名稱?

箭頭函數在test()函數內部聲明,因此它從該函數中獲取this的值。

您調用了user.test()以便在內部test this的值與user的值相同。

user.name"Class Scope"

進一步閱讀: 對象文字/初始值設定項中的自引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM