2009-07-11 105 views

回答

0

我不知道這是否適用,因爲它是特定於Javascript,我沒有看到Javascript標籤,但是......一次創建+調用匿名函數並不罕見。這通常是爲了保護全球範圍內的可變污染。

var x = 1; 
(function(){   
    var x = 2; 
})(); 
x == 1; 
0

它在那裏,所以你不必創建一個本質上無用的函數包裝器。

7

因爲你不寫一個匿名函數,然後立即調用它。它通常傳遞給其他一些可以處理它的函數(例如,使用匿名函數將數組映射到另一個數組)。

1

可能最大的用途是用於一次性功能,不會在其他地方使用,或者需要根據需要動態創建。這樣,他們不需要「污染」命名空間。

例如,在蟒:

x_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
y_values = map(lambda x: x**x + 2x + 3, x_values) 

通過使用拉姆達,我並不需要,以在模塊命名空間的功能只是爲了一個多項式Λ(x^2 + 2X + 3)。

有很多方面他們派上用場,特別是在函數式編程(例如查找閉包或咖喱)中。

0

它們的存在是因爲有很多次你想擁有表達式語法的方法語義。

var l = new List<int>() { 1, 2, 3, 4, 5 }; 
var a = l.Where(i => i > 3); // a = 4, 5 

我不想打擾寫一個新的方法謂詞來檢查一個整數是否大於三。我想要一個方法的意義,我只能放一個表達式。匿名函數讓我有兩個。活泉! :)

0

如果您問「爲什麼使用lambda表達式?」,那麼有幾個答案。首先,lambda表達式是簡寫,通常比全匿名函數(即使用delegate()項)或完整的函數和委託的冗長備選更容易閱讀和理解。 Lambda表達式對於執行簡單,簡單,「富有表現力」的計算(即一組輸入中的簡單數學)也是理想的,這在軟件編程中非常常見。

Lambda表達式是一個強大的工具,可以幫助您提高代碼的表現力,簡單性和可讀性。

2

它們通常用於回調。你不能只寫內容,因爲你的代碼不會直接執行它。

+0

如果不是直接,它是什麼時候執行的?它甚至沒有名字! – 2009-07-11 04:26:06