闭包函数的特性:就相当于引用传递,在闭包函数内改变外部变量,并不释放,而是彻底修改,直到闭包函数不再使用
package main
import "fmt"
//函数的返回值是一个闭包函数,返回函数类型
func Test01() func() int {
var a int //默认值为0
return func() int {
a++
return a * a
}
}
//普通函数
func Test02() int {
var b int
return b * b
}
func main() {
var i int = 1
var name string = "steven"
func() {
i = 2
name = "zhao"
fmt.Printf("i=%d,name=%s ", i, name) ////i=2,name=zhao
}() //()调用匿名函数
//闭包函数的特性,就相当于引用传递,在闭包函数内改变外部变量,并不释放,而是彻底修
//改,直到闭包函数不再使用
fmt.Printf("i=%d,name=%s ", i, name) //i=2,name=zhao
//返回闭包函数测试
//如果是普通函数调用,则局部变量调用之后就释放了。这是闭包的与众不同之处
f := Test01() //接收一下返回的闭包函数
fmt.Println(f()) //1
fmt.Println(f()) //4
fmt.Println(f()) //9
//普通函数测试
r := Test02()
fmt.Println(r) //0
fmt.Println(r) //0
fmt.Println(r) //0
}
运行结果: