[英]Differences Between Named and Unnamed Anonymous Javascript Functions
通常,在Javascript中,當我想將匿名/內聯函數作為參數傳遞給另一個函數時,我會執行以下操作之一。
someFunctionCall(function() {
//...
});
someFunctionCall( () => {
//...
});
但是,我最近繼承了一個使用命名函數作為內聯參數的代碼庫,就像這樣
someFunctionCall(function foo() {
//...
});
我以前從未見過這種語法。 該函數似乎仍然是匿名的 - 在調用或調用范圍中沒有定義foo
函數。 這只是一種風格問題,還是可以使用命名函數(上面的foo
)作為匿名函數來改變該程序的行為或狀態?
這是專門針對NodeJS(不是基於瀏覽器的程序)程序,我特別關注使用函數作為參數的行為。 這表示來自跨平台和運行時的行為的信息是受歡迎的。
使用命名函數表達式而不是匿名函數表達式至少有三個優點。
使用那些“命名的匿名函數”不會改變行為,但會在堆棧跟蹤中顯示函數名稱,這非常有用。 此函數也可以通過這種方式在其自身內調用。
我舉個例子
情況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)值將是一個。
希望你現在明白了。 Lamda表達式無法通過引用此對象來訪問值。 它只能訪問具有全局引用的變量。
在案例1中如果你想使它與lamba一起工作,你必須使用obj.count + = 1,名稱有引用。
其余的JavaScript函數實現保持不變,沒有太大區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.