【发布时间】:2011-05-28 22:26:44
【问题描述】:
PHP 或 JavaScript 中的闭包/Lambda 是什么?一个例子会很好地帮助我理解。我假设 Lambda 和闭包是一回事?
【问题讨论】:
标签: php javascript lambda closures
PHP 或 JavaScript 中的闭包/Lambda 是什么?一个例子会很好地帮助我理解。我假设 Lambda 和闭包是一回事?
【问题讨论】:
标签: php javascript lambda closures
【讨论】:
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)
map() 调用中显示了一个 lambda,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
【讨论】:
匿名函数是没有名称声明的函数。
例如(使用 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 的函数。
【讨论】:
匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。 Lambda 函数允许快速定义未在其他地方使用的一次性函数。
【讨论】: