当我创建一个常量来让我的闭包工作时:
let incrementByTen = makeIncrementer(forIncrement: 10)
它是否会跳过incrementer(),直到在return语句中调用它,这样return语句才能最终运行incrementer()函数并接收其值?
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
最佳答案
函数的参数在调用函数时进行计算。在这种情况下,这意味着当调用 makeIncrementer
时,将在实际调用 makeIncrementer
之前评估其参数(本例中为 10)。
同样,当makeIncrementer
被调用时,它的代码会依次执行,初始化runningTotal
,然后初始化incrementer
(注意,此时point amount
已被评估,因此在返回的增量中,它始终为 10。
随后,当您调用 incrementByTen()
时,在调用之前无需传递任何参数,也无需评估任何内容,作为执行闭包的一部分,runningTotal 将按 amount 递增,在本例中,始终为 10。
关于xcode - 嵌套函数中首先执行的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242824/