闭包的概念
函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成
实现
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* next 为一个函数,函数 i 为 0 */
next := getSequence()
/* 调用 next函数,i 变量自增 1 并返回 */
fmt.Println(next())
fmt.Println(next())
fmt.Println(next())
/* 创建新的函数 nextNumber1,并查看结果 */
next1 := getSequence()
fmt.Println(next1())
fmt.Println(next1())
}
解析
上述是通过匿名函数实现的闭包。getSequence中的变量i是局部变量,但是通过匿名函数的返回后,依然可以访问改变量,类似实现了全局变量的功能。后续nextNumber函数依然可以访问i变量,且i每次都会更新到环境中去,下次访问的时候使用更新后的i.