为什么第二个不是输出333?
![QQ截图20180928114149.jpg](https://static.studygolang.com/180928/31b043507079fdb23c3ef3e4ccb68184.jpg)
我好像明白了, 这里是因为fmt.Println的参数是逃逸的所以这里必定传入的是一个引用,
引用的话, 因为i的地址没变过所以只有一个最后的结果,
第二个因为j每次都是新的j赋值地址变化了,所以有3个结果.
这里和go编译时的内联展开方式有关系, 第二个展开了3次.第一个只有一次, 这个应该通过观察汇编就能看出来.
搞清楚了.
不过如果闭包引用的不是一个逃逸的interface{}参数而是一个确定的int类型的话会是什么结果呢?
有空再试试吧.
#7
更多评论