package main
import "fmt"
func main() {
/*
函数式编程:
支持将函数作为另一个函数的参数,叫回调函数
支持将函数作为另一个函数的返回值
一个函数有内层函数,该内层函数中,还会操作外层函数的局部变量,(外层函数中定义,外层函数的参数)并且该外层函数的返回值就是这个内层函数
该内层函数和局部变量,统称闭包结构,closure 闭包函数不会随执行结束而自动销毁
*/
res := increment()
fmt.Println(res)
//fmt.Printf("%T", res)
fmt.Println(res())
// 闭包生命周期
res1 := res()
fmt.Println(res1)
res2 := res()
fmt.Println(res2)
res3 := res()
fmt.Println(res3)
// 重新开辟内层给变量
res4 := increment()
res5 := res4()
fmt.Println(res5)
}
func increment() func() int { // increment 外层函数
i := 0
fun := func() int {
i++
return i
}
return fun // 将内层函数返回,本质是返回该内存函数的地址
// return func() // 将内层函数的执行结果 返回}