匿名函数 闭包
匿名函数
顾名思义,就是没有名字的函数。。。
func(){
fmt.Println("我就是匿名函数")
}
匿名函数的两种执行方法
- 将匿名函数赋给一个变量
- 定义后立即执行匿名函数
// 讲匿名函数赋给一个变量
tmp := func(){
fmt.Println("我是匿名函数")
}
tmp()
// 定以后立即执行匿名函数(在函数定义之后加小括号,表示直接运行)
func(){
fmt.Println("我是匿名函数")
}()
闭包
闭包是由函数和与其相关的引用环境组合而成的实体,个人认为就是把一个函数以及函数所用到的参数用另外一个函数包起来,保证函数多次运行的时候,所用到的值不会被初始化
func demo01() func(){
tmp := "这个变量无论多少次都不会被初始化"
tmp1 := 1
return func(){
tmp1++
fmt.Println(tmp,tmp1)
}
}
func main(){
test := demo01() // 此时test就是一个闭包
test() // 这个变量无论多少次都不会被初始化 2
test() // 这个变量无论多少次都不会被初始化 3
test() // 这个变量无论多少次都不会被初始化 4
test() // 这个变量无论多少次都不会被初始化 5
}
在上面的代码可以看到,定义了两个变量tmp和tmp1,这个被称之为自由变量,把匿名函数放在return返回的地方和自由变量构成的那个整体,就是闭包
优点
个人认为,就是使用自由变量这种概念,延长了函数中某些变量的生命周期,避免这些变量随着函数的调用而反复的初始化