闭包
某年某月某日,发现什么是闭包,当时怎么也表述清楚这个概念。作为程序猿肯定不能这么没面子唉,大脑努力的憋了一刻钟一秒后,终于憋出了我的闭包定义。
闭包是匿名函数及生成其时的上下文环境
下定义时的感觉估计应该是人生最快乐的事情,这一刻,思维会异常清晰,表达也会非常流畅,有种激扬文字的感觉,也是废话最多的时刻。人生的快乐与成就感估计源于倾倒废话。
纳尼,还是来看个例子吧,写一个用来返回闭包的函数:
1 |
|
1 |
|
一看很容易明白,一说就说的稀里糊涂。经过深刻面壁反思,我觉得这里面还隐藏着对其他一些基础概念的说明
对象的作用域、函数是第一类类型
说白就是函数内的变量能否引用到函数外的变量,本例中的b
当然h是可引用的,但变态如PHP,默认就不能,必须使用关键字use或者global。
函数是第一类类型其意即为函数可以作为函数的参数与返回值
对象的生命周期
一般来说函数 make-closure
内的对象(此处为a)
在其调用完后会得到释放,但当闭包内对其引用时却不会立即释放。
上下文环境信息
创建匿名函数的时候,其所能引用到的对象集合。
闭包
http://blog.soul11201.com/2018/05/08/clousure/