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

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

命名和未命名的匿名Javascript函數之間的差異

命名和未命名的匿名Javascript函數之間的差異

森林海 2021-04-16 13:14:43
通常,在Javascript中,當我想將匿名/內聯函數作為參數傳遞給另一個函數時,請執行以下操作之一。someFunctionCall(function() {    //...});someFunctionCall( () => {    //...});但是,我最近繼承了一個使用命名函數作為內聯參數的代碼庫,如下所示someFunctionCall(function foo() {    //...});我以前從未見過這種語法。該函數似乎仍然是匿名的-foo在調用范圍或被調用范圍中都沒有定義函數。這僅僅是樣式問題,還是可以使用命名函數(foo上述)作為匿名函數來更改該程序的行為或狀態?這是專門針對NodeJS(不是基于瀏覽器的程序)程序的,并且我對使用函數作為參數的特定行為特別感興趣。也就是說,歡迎跨平臺和運行時提供來自行為的信息。
查看完整描述

3 回答

?
PIPIONE

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

使用命名函數表達式而不是匿名函數表達式至少具有三個優點。

  • 由于函數名稱顯示在調用層次結構中,因此使調試更加容易。

  • 在函數的內部范圍中可以訪問函數名稱,因此可以將其用于遞歸

  • 函數名稱本身就像函數執行的自我文檔一樣,而不是閱讀代碼。


查看完整回答
反對 回復 2021-04-29
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

使用那些“命名的匿名函數”不會改變行為,但是會在堆棧跟蹤中顯示函數名,這非常有用。同樣,該函數也可以在自身內部以這種方式調用。


查看完整回答
反對 回復 2021-04-29
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我舉一個例子

情況1:

var obj =  {count: 0, counter: ()=> {this.count+=1;}}

如果執行console.log(obj.count),將得到0

情況2:

var obj  = {count: 0, counter (){this.count+=1;}}

在第二種情況下,如果您執行console.log(obj.count)值將為1。

希望您現在明白了。Lamda表達式無法使用此對象的引用訪問值。它只能訪問具有全局引用的變量。

在情況1中,如果要使其與lamba一起使用,則必須使用obj.count + = 1,并且名稱具有引用。

與其余的JavaScript函數實現保持不變沒有太大區別。


查看完整回答
反對 回復 2021-04-29
  • 3 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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