1、闭包:一个函数和于其相关的引用环境组合的一个整体
func AddUpper() func(int) int { n := 10 return func(x int) int { n = n + x return n } } func main() { f := AddUpper() fmt.Printf("res=%d\n", f(1)) fmt.Printf("res=%d\n", f(2)) fmt.Printf("res=%d\n", f(3)) }
AddUpper是函数,返回的数据类型是func(int) int
AddUpper返回的是一个匿名函数,但是这个匿名函数引用函数外的n,因此这个匿名函数就和n形成一个整体,构成闭包。
理解:闭包是类,函数时操作,n是字段。函数和它使用的n构成闭包
当反复的调用f时,因为n时初始化一次,因此每调用一次就进行累加,不会重新初始化