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