package main
import "fmt"
/*
一个外层函数中,有内层函数,该函数中,会操作外层函数的局部变量
并且该外层函数的返回值就是这个内层函数
这个内层函数和外层函数的局部变量,统称为闭包结构
局部变量的生命周期就会发生改变,正常的局部变量会随着函数的调用而创建,随着函数的结束而销毁
但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还在继续使用
*/
func main() {
r1 := insert()
fmt.Println("r1", r1())
fmt.Println("r1", r1())
fmt.Println("r1", r1())
r2 := insert()
fmt.Println("r2", r2())
fmt.Println("r2", r2())
fmt.Println("r2", r2())
fmt.Println("r1", r1())
fmt.Println("r1", r1()) //r1并未销毁
fmt.Println("r2", r1())
fmt.Println("r2", r1())
}
func insert() func() int { //外层函数
i := 0
fun := func() int { //内层函数
i++
return i
}
return fun
}
![](/i/l/?n=22&i=blog/2665954/202211/2665954-20221116202459342-142154521.png)
标签:闭包,外层,函数,r2,fmt,Println,go,r1 From: https://www.cnblogs.com/15078480385zyc/p/16897419.html