package main
import "fmt"
func Increase()func()int{
n := 0
return func()int{
n ++
return n
}
}
func main() {
in := Increase()
fmt.Println(in()) // 1
fmt.Println(in()) // 2
fmt.Println(in()) // 3
in1 := Increase()
fmt.Println(in1()) // 1
fmt.Println(in1()) // 2
fmt.Println(in1()) // 3
}
Increase() 返回值是一个闭包函数,该闭包函数访问了外部变量 n,那变量 n 将会一直存在,直到 in 被销毁。很显然,变量 n 占用的内存不能随着函数 Increase() 的退出而回收,因此将会逃逸到堆上。