什么是PHP或Javascript中的Closures / Lambda外行术语?

时间:2010-12-21 16:20:08

标签: php javascript lambda closures

用外行术语表示PHP或JavaScript中的Closures / Lambda是什么?一个例子对我的理解很有帮助。我在讨厌Lambda和Closures是一回事吗?

4 个答案:

答案 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()是一个闭包。

的JavaScript:

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);

alertOnealertTwo是分别在调用时提醒1和2的函数。

答案 3 :(得分:0)

匿名函数(也称为闭包)允许创建没有指定名称的函数。它们作为回调参数的值非常有用,但它们还有许多其他用途。 Lambda函数允许快速定义其他地方没有使用的丢弃函数。