为什么不只写匿名函数内容而不是匿名函数和匿名函数内容呢?
7 回答
因为您不编写匿名函数然后立即调用它。它通常被传递给其他一些对其进行处理的函数(例如,使用匿名函数将一个数组映射到另一个数组)。
它们通常用于回调。你不能只写内容,因为你的代码不会直接执行它。
可能最大的用途是一次性功能,不会在其他任何地方使用或需要动态地按需创建。这样,他们就不需要“污染”命名空间。
例如,在 python 中:
x_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_values = map(lambda x: x**x + 2x + 3, x_values)
通过使用 lambda,我不需要在模块命名空间中为一个多项式 (x^2 + 2x + 3) 创建一个函数。
它们在很多领域都派上用场,尤其是在函数式编程中(例如查找闭包或柯里化)。
它在那里,因此您不必创建本质上无用的函数包装器。
它们的存在是因为很多时候您希望使用表达式语法来获得方法语义。
var l = new List<int>() { 1, 2, 3, 4, 5 };
var a = l.Where( i => i > 3 ); // a = 4, 5
我不想费心编写一个新的方法谓词来检查整数是否大于三。我想要一种方法的含义,我只能放一个表达式。匿名函数让我两者兼得。哇!:)
如果您问“为什么使用 lambda 表达式?”,那么有几个答案。一方面,作为简写形式的 lambda 表达式通常比完全匿名函数(即使用 delegate() 术语)或完整的函数和委托的更冗长的替代方案更容易阅读和理解。Lambda 表达式也是执行简短、简单、“富有表现力”的计算(即对一组输入进行简单数学运算)的理想选择,这在软件编程中非常常见。
Lambda 表达式是一个强大的工具,可以帮助提高代码的表现力、简单性和可读性。
我不知道这是否适用,因为它特定于 Javascript,而且我没有看到 Javascript 标记,但是....一次创建+调用匿名函数并不少见。它通常是为了保护全局范围免受变量污染。
var x = 1;
(function(){
var x = 2;
})();
x == 1;