3 回答

TA貢獻1840條經驗 獲得超5個贊
在Function Objects 下,您將找到該name
屬性。
使用SetFunctionName
抽象操作將上下文名稱分配給該屬性,并在規范中的不同位置調用:
1) 在對象字面量內的屬性聲明處({ a: b }
將名稱設置為b
to a
,如果b
是匿名函數)。
2)在賦值時,(a = b
將b
的名稱設置為a
ifa
直接是一個標識符并且b
也是一個匿名函數)。
3) 內部對象解構默認值({ a = b } =
將b
s 名稱設置為a
ifb
是匿名函數)。
4)內部函數參數解構類似于3)。
5) 在變量聲明處與 2) ( let a = b; const a = b; var a = b;
)類似。
6) 在函數聲明處(包括生成器函數( function a() { }
)。
7) 在對象方法中,getter(以“get”為前綴)和 setter(以“set”為前綴)({ a() { }, get a() {}, set a() {} }
)。
8) 在class
聲明和表達式處( class a {}
)。
9)綁定函數時,被綁定的函數會接管要綁定的函數名,前綴為“bound”。
請注意,如果出于安全考慮存在計算鍵或對象屬性分配,則不會分配名稱。

TA貢獻1829條經驗 獲得超13個贊
函數的.name
屬性是在SetFunctionName過程中創建的,該過程在整個規范中的各個地方都被調用,通常當您分配變量或定義屬性時,右側是匿名函數表達式。
另請參閱ECMAScript 6 的 function.name 屬性、賦值表達式中 name 屬性的定義以及為什么 `obj.foo = function() { };` 不將名稱 `foo` 分配給函數?進行更多討論。

TA貢獻1893條經驗 獲得超10個贊
@asdfgerte 獲勝(最初)(我認為我不能授予評論作為答案)。在規范中找到但未命名為“名稱推斷” http://www.ecma-international.org/ecma-262/6.0/index.html#sec-assignment-operators-runtime-semantics-evaluation
添加回答
舉報