当函数结束时,会从栈区销毁,所以打印结果是10个1
func test(a int) {
a++
fmt.Println(a)
}
func main() {
var a int
for i := 0; i < 10; i++ {
test(a)
}
}
我们采用匿名函数和闭包的方式,实现函数在栈区的持久化
func test() func() int {
var a int
return func() int {
a++
return a
}
}
func main() {
f := test()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}