lambda表达式,也可称为closure(闭包),通常是在需要一个函数,但又不想费神去命名一个函数的场合下使用,也就是指匿名函数。由于其几乎被所有主流开发语言支持。
是java8新引入的一种语法,是一种紧凑的传递代码的方式。
使用lambda表达式可以使代码变的更加简洁紧凑。
lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
以下是lambda表达式的重要特征:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
PHP 5.3
PHP5.3增加了Lambda的支持,对于接受回调函数的PHP函数来说,lambda表达式非常方便。比如使用array_map函数遍历数组,并将回调结果重新赋值给数字各元素。在早期PHP版本中,我们在调用array_map之前,必须事先定义好回调函数,比如:
function quoteWords()
{
if (!function_exists ('quoteWordsHelper')) {
function quoteWordsHelper($string) {
return preg_replace('/(\w)/','"$1"',$string);
}
}
return array_map('quoteWordsHelper', $text);
}
现在PHP5.3对lambda表达式的支持,使得编码根据简单。如下使用lambda表达式的实现:
function quoteWords()
{
return array_map('quoteWordsHelper',
function ($string) {
return preg_replace('/(\w)/','"$1"',$string);
});
}
Javascript
javascript中的lambda表达式通常称为匿名函数,如果你使用过jquery库,那么你肯定知道匿名函数,这里主要作为回调函数使用。比如:
[js] view plain copy
$('#submit').on('click', function(){ functionbody. })
其中方法on的第二个参数就是匿名函数,javascript中的你们函数还有其他存在形式,比如:
[js] view plain copy
var func = new Function('x', 'return 2*x;');
或者
[js] view plain copy
var func = function(x) { return 2*x; }
还有就是很多js库常用的方式,表示创建匿名函数,并调用之:
[js] view plain copy
(function(x, y) {
alert(x+y);
})(2, 3);
总结
lambda表达式的出现简化了编码量,多用于函数回调、事件、匿名函数,并且与闭包的结合使用,更能发挥强大的作用。
以上文章来源于多个文章内容结合 挑选块 做出PHP使用者纪录