闭包的定义
闭包就是包含了自由变量的匿名函数,其中的自由变量即使已经脱离了原有的自由变量环境也不会被删除,在闭包的作用域内可继续使用这个自由变量,同一个匿名函数和不同的引用环境组成了不同的闭包。
闭包就如同有“记忆力”一般,可对作用域内的变量的引用进行修改。
闭包的“记忆力”
闭包可对作用域内变量的引用进行修改,在闭包内成功修改变量值后会对变量实际的值产生修改。
我们首先来看一个简单的例子:
package main
import 'fmt'
func main(){
num := 1
fmt.Printf("%p\n",&num)
func() {
num++
fmt.Println(num)
fmt.Printf("%p\n",&num)
}()
func() {
num++
fmt.Println(num)
fmt.Printf("%p\n",&num)
}()
}
执行结果如下:
0xc042066080
2
0xc042066080
3
0xc042066080