defer知识点,为什么f7返回结果为0?
结果为1
func f5() (r int) {
defer func() {
r++
}()
return 0
}
//结果为0,为什么?
func f7() (r int) {
defer func(r int) {
r = r + 5
}(r)
return r
}
f7 内定义了两个 r 变量。一个是返回值r, 一个是defer func 的参数。这是两个变量不是1个。defer func 内部修改的是参数r不影响外层返回的r。
两个变量的地址不一样,如果想改变得获取外部r的地址。
第一个是因为闭包的用法,所以是1,第二个是因为闭包里面的参数定义了,r其实是值传递进闭包里面,所以外面还是0
阅读作用域相关知识