美文网首页PHP的学习
理解闭包、闭包函数、匿名函数总结

理解闭包、闭包函数、匿名函数总结

作者: 陈钢镚学财 | 来源:发表于2017-02-17 14:18 被阅读71次

    前言


    从知乎上看到一篇文章,里面对php栈后端和java栈后端有一个非常贴切的类比。
    气宗与剑宗。
    php栈,是剑宗,成效极快,修为突飞猛进,但是根基不稳,空间有限。
    java栈,是气宗,从基础到应用,按部就班,稳扎稳打,你得耐得住前期的寂寞,才能有后来水到渠成的收获。

    可以看出,php栈的优势在于,成效快,几十天就能上手。而java,则必须奠定基础,说不定半年一年的,都还在积累过程中。
    相反,php可能到了某个程度,再想深入,却由于基础薄弱,后继无力。

    既然知道不足,那便去弥补起来,打扎实基础,一样可以笑傲江湖。

    闭包


    指,将“从其他作用域中”取得的变量、引用,保存起来的一个整体。
    这个整体,就是闭包,它实际上必须能做两件事:

    1. 利用某个规则(作用域链)取得其他作用域下的变量和引用
    2. 为这些“非法”得来的变量和引用,提供一个让其继续保存下去的堆栈资源。

    至于,你利用闭包做什么,是利用return传递这个闭包,还是用其他形式处理闭包,那就是你的事情了
    简单的讲,只要一种做法(一段代码),达到了上面的两个功能(特性),那他就是个闭包

    闭包函数


    闭包函数是指:

    1. 以函数的方式来实现一个闭包,
    2. 是在某个场景下,函数达到了闭包的两个功能(特性),尽管你不是主观的想要实现这个闭包,但客观上,它已经是一个闭包了

    所以,可以得出,闭包函数,本质上就是一个闭包,是一个用函数的形式来实现的闭包。
    简单的说,闭包函数就是闭包的一个载体,所以它本身必然是一个闭包。
    但是闭包函数是一个比较灵活的闭包,它还可以实现除闭包的两个功能以外,其他的一些功能,如:我在闭包函数里alert(javascript)或者echo(php)了……
    所以,从范围来讲,闭包是闭包函数的超集,从表现上来讲,闭包函数是闭包的一次实现

    注意:既然闭包可以保留一些值不被释放,那么,越多的闭包就意味着越多的内存资源被持续占用。

    匿名函数


    搜资料,并没有搜到一个统一的定义。
    个人认为,匿名函数在不同的语言之中,应该都具备没有名称、临时创建这两个特性。
    以PHP官方文档的定义为例:
    匿名函数(Anonymous function),也叫闭包函数(closures)。指,允许临时创建一个没有指定名称的函数。
    最常见的应用场景是:作为一个回调函数。
    这里有一个问题,匿名函数和闭包函数一样吗?
    不从PHP讲,匿名函数和闭包函数的定义应该是不一样的。
    PHP中,匿名函数可以当作一个特殊的数据类型,可以在变量间相互赋值,传递,与字符串型、数值型是平等的。
    那么,匿名函数就会通常用于实现一个闭包,个人猜想,这就是匿名函数也叫闭包函数的原因吧。

    最后的声明


    本文中所有的观点,都是本人个人意见与理解,并不一定是对的,权当给大家理解这些东西时的一个参考,许多错误之处,恳请大神指点。

    相关文章

      网友评论

        本文标题:理解闭包、闭包函数、匿名函数总结

        本文链接:https://www.haomeiwen.com/subject/tmtlwttx.html