Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是PHP或Javascript中的闭包/Lambda?_Php_Javascript_Lambda_Closures - Fatal编程技术网

什么是PHP或Javascript中的闭包/Lambda?

什么是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):

什么是PHP或JavaScript中的闭包/Lambda?举个例子有助于我的理解。我假设Lambda和闭包是一回事?

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

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:
答案已经有了:


匿名函数是不带名称声明的函数

例如(使用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);