【发布时间】:2020-12-13 15:48:37
【问题描述】:
在 The Swift Programming Language doc, Closures, "Capturing Values" 中有以下例子:
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
我遵循描述,除了为什么第一次调用 makeIncrementer 时 runningTotal 只初始化为 0。该文档显示以下内容:
let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
// returns a value of 10
incrementByTen()
// returns a value of 20
incrementByTen()
// returns a value of 30
为什么每次调用 incrementByTen 时 runningTotal 不重置为 0?
【问题讨论】:
-
因为它被捕获了。这就是例子的重点!这就是闭包是。