闭包和匿名函数的区别 php,php中的闭包函数和匿名函数有区别吗,何谓闭包?...

本文探讨了匿名函数和闭包在JavaScript和PHP中的区别与联系。在JavaScript中,闭包不一定是匿名函数,而PHP中匿名函数和闭包的概念有别于JS,两者在PHP中可视为相同。文中引用了MDN和PHP官方文档,并通过实例解释了何时使用闭包。
摘要由CSDN通过智能技术生成

5441acda3150725394d6339e74dd00d8.png

繁花如伊

广义上来说,匿名函数就是没有名字的函数,而闭包则是可以感知环境的函数,注意,这里指的环境是定义函数时的环境。不太同意 @有明 的答案中JS部分的说法,在JS里,闭包不一定是匿名函数,MDN的文档中指出:闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。换句话说,这些函数可以“记忆”它被创建时候的环境。从文档中举的第一个例子:function init() {  var name = "Mozilla"; // name是被init创建的局部变量

  function displayName() { // displayName()是一个内部函数,

    alert(name); // 它是一个使用在父函数中声明的变量的闭包

  } 

  displayName();

}

init();可以看到,displayName()是有名字的,但也是一个闭包。回到PHP上来,从官方文档中可以看出,在PHP中闭包和匿名函数可以视为等同的:匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。按照Symfony主要作者Fabien Potencier在这篇文章On PHP 5.3, Lambda Functions, and Closures中的说法,PHP中匿名函数和闭包是有区别的:To sum up, a lambda function is an anonymous PHP function that can be stored in a variable and passed as an argument to other functions or methods. A closure is a lambda function that is aware of its surrounding context.我的结论是:理论上匿名函数和闭包是不一样的概念,在PHP中这两者概念与其他语言(比如JavaScript)是不一样的,这两者在使用上可以视为等同的。至于问题中的关于什么时候使用的疑问,Fabien Potencier的文章中有详细的例子,建议仔细阅读。参考:MDN: JS闭包PHP: 匿名函数On PHP 5.3, Lambda Functions, and Closures

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值