func f1() (r int) { defer func() { r++ }() return 0 } func f2() (r int) { t := 5 defer func() { t = t + 5 }() return t } func f3() (r int) { defer func(r int) { r = r + 5 }(r) return 1 }
as:
- f1() =1,return 把r设成0,然后defer把r改为1 ;
- f2() =5,return 把r设成5,然后defer改的是t,不影响返回值 ;
- f3() =5,return 把r设成1,然后defer把r改为r+5,但是用的r是defer设定时的r,=0;
- (靠,是1,r+5的r不是外面的r)
f(3)
defer内部的r非返回值r