闭包
2022-02-20 小于 1 分钟
闭包就是能够读取其他函数内部变量的函数。
闭包的本质:闭包本质依旧是一个函数,只是这个函数引用着外面的变量/参数。
闭包的特点:
- 返回的是一个匿名函数,但是这个匿名函数引用着外面的变量/参数,因此这个匿名函数就和变量/参数形成一个整体,构成闭包。
- 闭包中使用的变量/参数会一直保存在内存中,所以会一直使用。意味着闭包不可滥用。
package main
import "fmt"
// 定义一个getSum函数返回值为一个函数,这个函数的参数是一个int类型,返回值也是int类型
func getSum() func(int) int {
var sum int = 0
return func(num int) int {
sum += num
return sum
}
}
func main() {
f := getSum()
// f(1) 实际调用的是 getSum 返回的函数,此时sum = 0
fmt.Println(f(1)) // 1
// f(1) 调用后 sum的值被赋值为1,由于闭包的原因,f(2)调用时,sum = 1 + 2
fmt.Println(f(2)) // 3
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20