亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 JavaScript 函數表達式保存在內存中?

如何將 JavaScript 函數表達式保存在內存中?

狐的傳說 2023-08-24 10:00:45
let sayBye = function () {    console.log(`Bye`);}let bye = sayBye;   sayBye = null;    // Xbye();            // Y在問這個問題之前,我在谷歌上搜索了一下,發現了這篇文章。然后我想,在 X 行之前,結構類似于這樣:sayBye ---------------                                                                    |                            |  => function() {....}                      |bye-------------------x行之后,我認為是這樣的:sayBye                        MEMORY                                                                                        |  => function() {....}                      |bye-------------------但是當我在 Firefox 開發者工具中寫下再見時,我看到了這個這怎么可能?當我寫的時候,let bye = sayBye;sayBye 被復制了嗎?let sayBye = function () {    console.log(`Bye`);}let bye = sayBye;   sayBye = null;    // Xbye();            // Yconsole.log(bye);
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊


變量和方法可以從語法位置推斷匿名函數的名稱(ECMAScript 2015 中的新增功能)。

"sayBye"Chrome 和 Firefox在打印時都會給出bye.name.


bye.toString()根據個人實驗,Chrome 控制臺會在詢問 時顯示bye,而 Firefox 會顯示他們的自定義輸出,其中顯示推斷的函數名稱(這確實有意義,因為知道名稱通常有助于調試)。


查看完整回答
反對 回復 2023-08-24
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

函數是對象,因此賦值 x = y 不會被復制。我嘗試了這個 Nodejs 我得到


Bye

[Function: sayBye]


如果你沒有命名函數,JS 會自動為其添加名稱。在 ES6 中,您可以使用 myFunction.name檢查函數的名稱,即“name”是函數對象的屬性。重要的是,這是只讀屬性。好的做法是使用constwhile letusing 函數表達式。另外,如果可能的話,嘗試命名函數,這樣在調用堆棧上調試就很容易


查看完整回答
反對 回復 2023-08-24
?
MMMHUHU

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);


查看完整回答
反對 回復 2023-08-24
  • 3 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號