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是不会消失的。