用外行术语表示PHP或JavaScript中的Closures / Lambda是什么?一个例子对我的理解很有帮助。我在讨厌Lambda和Closures是一回事吗?
答案 0 :(得分:4)
lambda是一个匿名函数。闭包是一个带有它的范围的函数。我的示例将在Python中,但它们应该让您了解适当的机制。
print map(lambda x: x + 3, (1, 2, 3))
def makeadd(num):
def add(val):
return val + num
return add
add3 = makeadd(3)
print add3(2)
lambda显示在map()
调用中,add3()
是一个闭包。
js> function(x){ return x + 3 } // lambda
function (x) {
return x + 3;
}
js> makeadd = function(num) { return function(val){ return val + num } }
function (num) {
return function (val) {return val + num;};
}
js> add3 = makeadd(3) // closure
function (val) {
return val + num;
}
js> add3(2)
5
答案 1 :(得分:4)
答案 2 :(得分:2)
匿名函数是声明没有名称的函数。
例如(使用jQuery):
$.each(array, function(i,v){
alert(v);
});
此处的功能是匿名的,仅为此$.each
电话创建。
闭包是一种函数(它可以在匿名函数中使用,或者可以命名),其中传递给它的参数被“捕获”并且在范围之外保持不变。
一个闭包(在JavaScript中):
function alertNum(a){
return function(){
alert(a);
}
}
闭包返回一个匿名函数,但它本身不一定是匿名函数。
继续关闭示例:
alertOne = alertNum(1);
alertTwo = alertNum(2);
alertOne
和alertTwo
是分别在调用时提醒1和2的函数。
答案 3 :(得分:0)
匿名函数(也称为闭包)允许创建没有指定名称的函数。它们作为回调参数的值非常有用,但它们还有许多其他用途。 Lambda函数允许快速定义其他地方没有使用的丢弃函数。