3 回答

TA貢獻1807條經驗 獲得超9個贊
變量和方法可以從語法位置推斷匿名函數的名稱(ECMAScript 2015 中的新增功能)。
"sayBye"
Chrome 和 Firefox在打印時都會給出bye.name
.
bye.toString()
根據個人實驗,Chrome 控制臺會在詢問 時顯示bye
,而 Firefox 會顯示他們的自定義輸出,其中顯示推斷的函數名稱(這確實有意義,因為知道名稱通常有助于調試)。

TA貢獻1811條經驗 獲得超5個贊
函數是對象,因此賦值 x = y 不會被復制。我嘗試了這個 Nodejs 我得到
Bye
[Function: sayBye]
如果你沒有命名函數,JS 會自動為其添加名稱。在 ES6 中,您可以使用 myFunction.name檢查函數的名稱,即“name”是函數對象的屬性。重要的是,這是只讀屬性。好的做法是使用constwhile letusing 函數表達式。另外,如果可能的話,嘗試命名函數,這樣在調用堆棧上調試就很容易

TA貢獻1834條經驗 獲得超8個贊
您對函數的名稱感到困惑。
記憶中的事情發生的方式和你想象的完全一樣。
但是,該函數沒有顯式名稱,因此瀏覽器為該函數提供了一個隱式名稱,即首先分配給它的變量或對象屬性的名稱,在本例中為sayBye
.
然后,它被分配給另一個變量,但名稱不變。
如果你給它一個明確的名稱,你可以看到這一點:
//? Explicit name ----vvvv
let sayBye = function myFn() {
? ? console.log(`Bye`);
}
let bye = sayBye;? ?
sayBye = null;? ? // X
bye();? ? ? ? ? ? // Y
console.log(bye);
添加回答
舉報