闭包 (closure)详细解释(一) |
您所在的位置:网站首页 › 数学closure › 闭包 (closure)详细解释(一) |
1.1. 定义
在A函数中定义一个B函数(函数的嵌套定义),在B函数中使用了A函数中的变量,就会产生闭包。具体来说,就是B就是一个闭包。 注意: 1.嵌套定义 2.引用变量 1.2. 用debuuger去观察闭包
如果没有变量引用,则也不会看到闭包。 1.3. 闭包的作用是什么? 延长变量生命周期。 上面的代码中,闭包B会延长变量i的生命周期,它有能力可以让i活的更久一些。这里的i 是A的局部变量,它正常的生命周期是函数A的调用过程。 在调用A的过程中,由于i是它的局部变量,所以A会向内存申请一个空间来放i,但当A调用结束后,这个空间会回收,即i就死了。 闭包B的能力就是可以让函数A()执行完成之后,i仍然活着!!!! 实现这个能力还需要有一个帮手:return ! 见如下代码: 1.4. 示例:延长i的生命周期 可以看到,每次调用r(),都可以对i的值进行++,再输出来。这就说明,A()调用之后,i 并没有死掉了,它还活着。 原因如下: 还没有开始调用A() 接下来,开始调用A() A函数内部,有两个局部变量: Ø i, Ø B 它还是引用类型的。要用到堆区 所以A会去申请空间
接下来,执行return B
结果如下:
由于在B的函数体中用到变量i ,所以i的空间不能被回收。即i的生命周期被延长了。 再次观察调试面板: 1.5. 理解延长变量的生命周期 由于在函数B的内部它用到它外部的变量i,在这个函数B没有死掉之前,i是不会消失的。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |