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时初始化一次,因此每调用一次就进行累加,不会重新初始化

posted on 2022-03-02 23:44  smile学子  阅读(12)  评论(0编辑  收藏  举报