23_Go基础(闭包_1)

package main

import "fmt"

func adder() func(int) int {
    fmt.Println(1)
    var x int
    return func(y int) int {
        fmt.Println(2)
        x += y
        return x
    }
}

func main() {
    fmt.Println(0)
    var f = adder() // 返回一个 func(y int) int,此时 x = 0,y 还没有参数
    fmt.Println(3)
    fmt.Println(f(10))
    fmt.Println(4)
    fmt.Println(f(20))
    fmt.Println(5)

    // 0    main 函数开始
    // 1    adder 内部执行,返回一个 func(y int) int,此时 x = 0,y 还没有参数
    // 3
    // 2    f(10) 相当于给匿名函数传参, y = 10, x = 0 + 10
    // 10
    // 4
    // 2    f(20) 相当于给匿名函数传参, y = 20, x = 10 + 20
    // 30
    // 5
}
原文地址:https://www.cnblogs.com/luwei0915/p/15495321.html