01 / 05准备播放
先把两种 defer 放在一起
同一个 x,不同的读取时机
DEFER CAPTURE登记时保存 vs 执行时读取
先看完整代码RUNNABLE CODE完整例子 · demo 的返回收尾
执行第 5–6 行
package main
import "fmt"
func demo() {
x := 1
defer fmt.Println("argument", x)
defer func() {
fmt.Println("closure", x)
}()
x = 2
return
}
func main() {
demo()
}
这是可直接运行的完整示例。
CURRENT STEP同一个 x,两种读取方式
进入函数,x 先是 1x := 1
DEFER STACK待执行清单
顶 → 底- 1
- 2
还没有登记项目
OUTPUT实际输出
发生顺序- 1
- 2
还没有输出
先登记两条 defer,真正执行要等 demo 返回。
旁白
点一下播放即可。也可以只听声音,或拖动进度跳到想看的位置。
0:001:15
正在准备本课音轨与图解。首次播放需要点一下。