闭包
什么是闭包
- 函数内包含内嵌函数,且此内嵌函数调用外部非全局变量
- 并且内嵌函数被父函数返回或被赋值
- 以上,即为闭包
- 通俗讲,闭包=内嵌函数+函数意外环境变量 组成的一个整体代码包
举例
func main() {
// 什么是闭包: 闭包是由内嵌函数结构引出的问题,当内嵌函数调用了外部的非全局变量时,并且内嵌函数被返回或赋值,就形成了闭包
var i int=5
in := func()func(){
fmt.Printf("in 中的i = %v\n", i)
j := 10
// 以下为闭包,调用外部变量
return func(){
fmt.Printf("内嵌函数中的i = %v, j = %v\n", i, j)
}
}
fmt.Printf("type is %T\n", in) // type is func() func()
in()
i = i+1
in()
// output
// in 中的i = 5
// in 中的i = 6
a := in() // a type is func()
a()
// output
//in 中的i = 5
//in 中的i = 6
//in 中的i = 6
//内嵌函数中的i = 6, j = 10
}