为了账号安全,请及时绑定邮箱和手机立即绑定

5-5 闭包和函数是引用类型

既然 planA = runningMetersWithMetersPerDay, 那为什么调用planA和调用runningMetersWithMetersPerDay时产生的计算结果完全不一样?为什么只有前者会把totalMeters清零,后者不会?

正在回答

2 回答

其实planA就是()->Int嘛 ,他调用的就是函数里面的闭包 并没有调用函数runningMetersWithMetersPerDay

而闭包引用了函数里面的totalmeter , totalmeter只有一个地址 , 所以会随着其+=不断改变

0 回复 有任何疑惑可以回复我~

前者不会把planA中的totalMeters清零,因为闭包获取的是该对象的引用,下次再次调用planA的时候,相当于你是根据地址去获取totalMeters的值,metersDay是上个函数带过来的,所以会不断的增加2000,然后把结果更新totalMeters的引用。 如果重新调用runningMetersWithMetersPerDay相当于重新开辟一份内存,此时的totalMeters对应的内容地址中保存的是0 。说的有点啰嗦,使用指针的理念讲的,不知道有没有表达清楚

0 回复 有任何疑惑可以回复我~
#1

慕田峪5265974 提问者

因为我没有编程基础,所以你的这段解释还是比较难以理解。所以"var planA = runningMetersWithMetersPerDay" 这行代码的真正含义是什么呢?过去我一直以为只是runningMetersWithMetersPerDay太长了所以用个比较简单的planA来替代,按照这个例子来看他俩是完全不一样的东西吗?感谢回答。
2017-02-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

5-5 闭包和函数是引用类型

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信