5-5 閉包和函數是引用類型
既然 planA = runningMetersWithMetersPerDay, 那為什么調用planA和調用runningMetersWithMetersPerDay時產生的計算結果完全不一樣?為什么只有前者會把totalMeters清零,后者不會?
既然 planA = runningMetersWithMetersPerDay, 那為什么調用planA和調用runningMetersWithMetersPerDay時產生的計算結果完全不一樣?為什么只有前者會把totalMeters清零,后者不會?
2017-02-03
舉報
2019-01-12
其實planA就是()->Int嘛 ,他調用的就是函數里面的閉包 并沒有調用函數runningMetersWithMetersPerDay
而閉包引用了函數里面的totalmeter , totalmeter只有一個地址 , 所以會隨著其+=不斷改變
2017-02-05
前者不會把planA中的totalMeters清零,因為閉包獲取的是該對象的引用,下次再次調用planA的時候,相當于你是根據地址去獲取totalMeters的值,metersDay是上個函數帶過來的,所以會不斷的增加2000,然后把結果更新totalMeters的引用。 如果重新調用runningMetersWithMetersPerDay相當于重新開辟一份內存,此時的totalMeters對應的內容地址中保存的是0 。說的有點啰嗦,使用指針的理念講的,不知道有沒有表達清楚