问答详情
源自:5-5 闭包和函数是引用类型

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

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

提问者:慕田峪5265974 2017-02-03 11:57

个回答

  • 梁华建
    2019-01-12 23:26:32

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

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

  • WDavid
    2017-02-05 17:01:49

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