2009-07-11 93 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