闭包

闭包对闭包外的环境引入是直接引用,编译器监测到闭包,会将闭包饮用的外部变量分配到堆上
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





posted @ 2019-12-19 19:33  离地最远的星  阅读(73)  评论(0编辑  收藏  举报