golang闭包问题
有函数如下
package main
import "fmt"
func intSeq() func() int{
i := 0
return func() int {
i += 1
return i
}
}
func main(){
nextInt := intSeq()
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
newInts := intSeq()
fmt.Println(newInts())
}
在intSeq()中,匿名函数里的i和外部环境中的i是同一个吗?还是说外部的i是在栈中,匿名函数的i是在堆中?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以进行一下内存逃逸分析, 执行一下
可以看到输出结果如下:
可以看到&i,i和nextInt函数都从栈空间逃逸到了堆上. &i就是nextInt函数中的那个i.