簡體   English   中英

一個匿名的 function 怎么知道它的名字?

[英]How does an anonymous function know its name?

考慮以下代碼。

 const foo = () => {}; console.log(foo.name); // prints foo const bar = foo; console.log(bar.name); // prints foo again

請指出我對語句const foo = () => {}; . 表達式() => {}計算結果為匿名 function object 並且該語句將名稱foo綁定到該 object。 當然,表達式() => {}的值不知道它的name foo ,但是在foo綁定到它之后它以某種方式知道。 但這是怎么發生的? 我假設=不會改變右側,並且第 3 行和第 4 行的行為符合我的預期。

根據規范,當評估變量聲明並且初始化程序是匿名 function 定義時,該定義以特殊方式評估,傳遞要用作 function 名稱的變量名稱:

LexicalBinding : BindingIdentifier初始化
1. 讓bindingIdBindingIdentifierStringValue
2.讓lhs成為! ResolveBinding ( bindingId )。
3. 如果IsAnonymousFunctionDefinition ( Initializer ) 為true ,則
一個。 讓價值存在? 帶有參數bindingIdInitializerNamedEvaluation
...

在評估賦值表達式時會發生類似的事情。

從技術上講,您的代碼的第 1 行不是匿名 function,而是“隱式命名” function 表達式(或者正如 mdn 也稱之為“未命名函數”)。

來自 mdn:

分配了 function 表達式的變量將具有 name 屬性。 如果將其分配給不同的變量,則名稱不會更改。 如果 function 名稱被省略,它將是變量名稱(隱式名稱)。 如果 function 名稱存在,它將是 function 名稱(顯式名稱)。 這也適用於箭頭函數(箭頭沒有名稱,因此您只能給變量一個隱式名稱)。

另見: Function.name#function_expression

暫無
暫無

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

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