什么是PHP或Javascript中的闭包/Lambda?
什么是PHP或JavaScript中的闭包/Lambda?举个例子有助于我的理解。我假设Lambda和闭包是一回事?匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。Lambda函数允许快速定义其他地方未使用的丢弃函数。Lambda是匿名函数。闭包是一个带有作用域的函数。我这里的示例将使用Python,但它们应该让您了解适当的机制什么是PHP或Javascript中的闭包/Lambda?,php,javascript,lambda,closures,Php,Javascript,Lambda,Closures,什么是PHP或JavaScript中的闭包/Lambda?举个例子有助于我的理解。我假设Lambda和闭包是一回事?匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。Lambda函数允许快速定义其他地方未使用的丢弃函数。Lambda是匿名函数。闭包是一个带有作用域的函数。我这里的示例将使用Python,但它们应该让您了解适当的机制 print map(lambda x: x + 3, (1, 2, 3)) def makeadd(num):
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:
答案已经有了:
匿名函数是不带名称声明的函数 例如(使用jQuery): 这里的函数是匿名的,它是为这个
$创建的。每个调用
闭包是一种函数类型(可以在匿名函数中使用,也可以命名),其中传递到闭包中的参数被“捕获”,即使超出范围也保持不变
闭包(在JavaScript中):
闭包返回一个匿名函数,但它本身不必是匿名函数
继续关闭示例:
alertOne = alertNum(1);
alertTwo = alertNum(2);
alertOne
和alertTwo
是调用时分别向1和2发出警报的函数。这不是lambda。是的,它是。试着阅读手册。匿名函数和闭包不一样。那个家伙说“在php中”。不是在计算机科学课程的典型定义中。不过还是要谢谢你的否决票。@profitphp:别担心,这是一个很常见的误解。因此,我认为没有理由投反对票。闭包不是传入的函数,而是创建并附加到内部函数的上下文,不管它是否匿名。在PHP中,指定要添加到闭包中的内容,在JS中,所有局部变量都可用。在Firebug的最新版本中,您可以实际检查该闭包对象,非常酷!
$.each(array, function(i,v){
alert(v);
});
function alertNum(a){
return function(){
alert(a);
}
}
alertOne = alertNum(1);
alertTwo = alertNum(2);