1.1.1. 什么是闭包:

闭包就是一个函数,这个函数的返回值是一个函数类型。闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)。

例子如下:

//定义函数,返回值也是函数。
func addUpper() func(int) int  {
    num := 10
    return func(n int) int {
        num = num + n;
        return num
    }
}
func main() {
    //addUpper()返回值是一个函数。
    var addFun  = addUpper()
    fmt.Println(addFun(1)) // 11
    fmt.Println(addFun(2)) // 13
    fmt.Println(addFun(3)) // 16
}
  • 返回的是一个匿名函数,但是这个匿名函数引用到函数外的 num ,因此这个匿名函数就和 num 形成一个整体,构成闭包。
  • 可以这样理解: 闭包是类, 函数是操作,num 是字段。函数和它使用到的 num 构成闭包。
  • 反复的调用 addFun 函数时,因为 num 是初始化一次,因此每调用一次就进行累计。
  • 我们要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包。

闭包的最大好处就是把匿名函数引用到的变量保存起来,下次继续使用。

results matching ""

    No results matching ""