golang-闭包
1.1 概念
闭包函数:声明在一个函数中的函数,叫做闭包函数。
1.2 特点
让外部访问函数内部变量成为可能; 局部变量会常驻在内存中; 可以避免使用全局变量,防止全局变量污染; 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
1.3 例子
func adder() func(int) int {
var x int
return func(y int) int {
x += y
return x
}
}
func main() {
var f = adder()
fmt.Println(f(10)) //10
fmt.Println(f(20)) //30
fmt.Println(f(30)) //60
f1 := adder()
fmt.Println(f1(40)) //40
fmt.Println(f1(50)) //90
}
变量 f 是一个函数并且它引用了其外部作用域中的 x 变量,此时 f 就是一个闭包。 在 f 的生命周期内,变量 x 也一直有效。
Notice: 定义全局变量的时候,不能用类型推导的方式
1.3 全局变量
全局变量特点:
1、常驻内存
2、污染全局
局部变量的特点:
1、不常驻内存
2、不污染全局
闭包:
1、可以让一个变量常驻内存
2、可以让一个变量不污染全局