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

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值