闭包

闭包对闭包外的环境引入是直接引用,编译器监测到闭包,会将闭包饮用的外部变量分配到堆上
package main

func fa(a int) func(i int) int {
    return func(i int) int {
        fmt.println(&a)
        a = a + i
        return a
    }
}

func main() {
    f := fa(1)  //此时f和g引用的闭包环境中的a不是同一个,而是函数调用产生的副本
    println(f(1)) // 1
    println(f(1)) // 2 多次调用f引用的a是同一个a
}

0xc00000a0d0
2
0xc00000a0d0
3





原文地址:https://www.cnblogs.com/hualou/p/12069698.html