1. package main
    2. import "fmt"
    3. func Increase()func()int{
    4. n := 0
    5. return func()int{
    6. n ++
    7. return n
    8. }
    9. }
    10. func main() {
    11. in := Increase()
    12. fmt.Println(in()) // 1
    13. fmt.Println(in()) // 2
    14. fmt.Println(in()) // 3
    15. in1 := Increase()
    16. fmt.Println(in1()) // 1
    17. fmt.Println(in1()) // 2
    18. fmt.Println(in1()) // 3
    19. }

    Increase() 返回值是一个闭包函数,该闭包函数访问了外部变量 n,那变量 n 将会一直存在,直到 in 被销毁。很显然,变量 n 占用的内存不能随着函数 Increase() 的退出而回收,因此将会逃逸到堆上。