【发布时间】:2018-06-08 15:58:36
【问题描述】:
golang 的文档是这样说的:
在评估 defer 语句时评估延迟函数的参数。
这让我很困惑。
问题:“已评估”是否意味着该值已知?我只是不明白为什么两个示例打印不同。这让我很困惑。
下面有两个例子:
//It prints 0.
func deferA() {
i := 0
defer fmt.Println(i)
i++
return
}
//It prints 1.
func deferB() {
i := 0
defer func() {
fmt.Println(i)
}()
i++
return
}
【问题讨论】:
-
defer 语句将函数的执行推迟到周围的函数返回。延迟调用的参数会立即计算,但函数调用在周围的函数返回之前不会执行。