fun f6() int {
var i int = 0
defer func(a int) {
fmt.Println("i f6:", a)
i = i+5
}(i)
i = 1
i++
return i
}
按照改写规则是将return语句分开成两句写,return xxx会被改写成:
返回值 = xxx
调用defer函数
空的return
i=0
返回值r = i(i等于0)
i=1
i++(i等于2)
return r(我觉得应该是0啊)
结果为什么是2呢?
不懂go 但是看一下defer 函数
难道不是这样执行的
所以
return i 是单指令多操作 就是
在return i这句代码 改为 r = i; return,
但是defer 函数 会被到 了 赋值 和 返回之间,你这个函数也没影响 外作用域 i 的数值
所以返回肯定是2,不是 0 啊
肯定不是提前 把 i变为r,那样也不符合逻辑