defer(3)

题目:

f1()、f2()、f3() 函数分别返回什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
}

答案解析:

1 5 1。

​ 对于f1()f2()昨天就解析过了,这里不作过多赘述。

f3()defer语句中注册的是一个匿名函数,在这个匿名函数中,参数 r 是按值传递的,也就是传递的是 r 的副本。因此,这个匿名函数中的 r 和外层函数 f3() 中的 r 实际上是两个不同的变量。在匿名函数中,r 被加上了 5,但这个修改只是对匿名函数中的 r 副本进行的,不会影响外层函数 f3() 中的 r。


defer(3)
http://example.com/2023/07/11/Go每日一题/defer(3)/
作者
Feng Tao
发布于
2023年7月11日
更新于
2023年7月11日
许可协议