闭包(Closure)
# 闭包(Closure)
# 介绍
闭包本质依旧是一个匿名函数,只是这个函数引入外界的变量/参数 匿名函数+引用的变量/参数 = 闭包
# 特点
返回的是一个匿名函数,但是这个匿名函数引用到函数外的变量/参数 ,因此这个匿名函数就和变量/参数形成一个整体,构成闭包。
闭包中使用的变量/参数会一直保存在内存中,所以会一直使用---》意味着闭包不可滥用(对内存消耗大)
// 1. 接收一个函数
// 2. 内部函数使用外部函数的变量
// 3. 返回内部函数
1
2
3
2
3
# 闭包应用场景
闭包应用场景:闭包可以保留上次引用的某个值,我们传入一次就可以反复使用了(其实就是把闭包中的变量放到了全局变量中)
# 案例展示
# 1. 使用闭包实现累加器
package main
import "fmt"
// 1. 接收一个函数
// 2. 内部函数使用外部函数的变量
// 3. 返回内部函数
func accumulator() func(value int) int {
var sum int = 0 // 本质就是把闭包中的变量放到了全局变量中
return func(value int) int {
sum = sum + value
return sum
}
}
func main() {
v1 := accumulator()
fmt.Println(v1(1))
fmt.Println(v1(2))
fmt.Println(v1(3))
}
/*
1
3
6
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
编辑 (opens new window)