问答详情
源自:8-4 Swift-值类型和引用类型

为什么在每次调用时,totalmiles不会被置为0呢?

为什么在每次调用时,totalmiles不会被置为0呢?我也有同样的问题

提问者:风清丶扬 2015-02-17 17:25

个回答

  • qizt
    2015-06-13 23:39:50

    注意,var totalMiles = 0 这句是处在 calcTotalMiles 函数中。

    而你说的每次调用,调用的并不是 calcTotalMiles 这个函数,而是 calcTotalMiles 这个函数的返回值,也就是另一个函数。返回的函数被命名为 dailyTwoMiles 或者 dailyThreeMiles,返回函数的内容是闭包内容:{totalMiles += todayMiles; return totalMiles; },其中并没有对 totalMiles 重置的语句,所以totalMiles不会被重置。

    那么问题来了,totalMiles 什么时候被重置。很简单,var totalMiles = 0 处在 calcTotalMiles 函数中,当然是 calcTotalMiles 被调用时会被重置,也就是 var dailyTwoMiles = calcTotalMiles(2) 和 var dailyThreeMiles = calcTotalMiles(3) 这两句在运行时会重置 titalMiles.