Go闭包作用域

winnie123321 · · 1343 次点击
我好像明白了, 这里是因为fmt.Println的参数是逃逸的所以这里必定传入的是一个引用, 引用的话, 因为i的地址没变过所以只有一个最后的结果, 第二个因为j每次都是新的j赋值地址变化了,所以有3个结果. 这里和go编译时的内联展开方式有关系, 第二个展开了3次.第一个只有一次, 这个应该通过观察汇编就能看出来. 搞清楚了. 不过如果闭包引用的不是一个逃逸的interface{}参数而是一个确定的int类型的话会是什么结果呢? 有空再试试吧.
#7
更多评论
这个问题值得关注一下.
#1
第一程序是执行i的最后运行状态。第二个传递的是一个拷贝。
#2