什么是 PHP 中的 Closures/Lambda 或 Javascript 中的外行术语? [复制]
Posted
技术标签:
【中文标题】什么是 PHP 中的 Closures/Lambda 或 Javascript 中的外行术语? [复制]【英文标题】:What is Closures/Lambda in PHP or Javascript in layman terms? [duplicate] 【发布时间】:2011-05-28 22:26:44 【问题描述】:php 或 javascript 中的闭包/Lambda 是什么?一个例子会很好地帮助我理解。我假设 Lambda 和闭包是一回事?
【问题讨论】:
【参考方案1】:SO 已经有了答案:
What is a lambda (function)?
How do JavaScript closures work?
【讨论】:
【参考方案2】: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()
是一个闭包。
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
【讨论】:
【参考方案3】:匿名函数是没有名称声明的函数。
例如(使用 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 的函数。
【讨论】:
【参考方案4】:匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。 Lambda 函数允许快速定义未在其他地方使用的一次性函数。
【讨论】:
这不是 lambda。 是的。尝试阅读手册。 匿名函数和闭包不一样。 那家伙说“在 php 中”。不在计算机科学课程的典型定义中。但无论如何感谢您的反对。 @profitphp:别担心,这是一个很常见的误解。因此,我认为没有必要投反对票。闭包不是传入的函数,它是创建并附加到内部函数的上下文,无论它是否匿名。在 PHP 中,您指定要添加到闭包中的内容,在 JS 中,所有局部变量都可用。在最新版本的 Firebug 中,您实际上可以检查该闭包对象,非常酷!以上是关于什么是 PHP 中的 Closures/Lambda 或 Javascript 中的外行术语? [复制]的主要内容,如果未能解决你的问题,请参考以下文章