初级会员
  • 第 28463 位会员
  • involker
  • 2019-01-06 18:13:05
  • Offline
  • 20 60

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 GO到底适合干什么?
    大家还能在秀一点嘛、、、
  • 2楼 @CreatCodeBuild 还有一个问题,看到资料有说变量逃逸: “在局部变量可见域之外使用对应的值可能会导致值的生命周期变长(实际上这时发生了变量逃逸)。” 也就是说,我之前认为的t没有被销毁不是因为t此时处于被引用状态,而是因为t一开始就是被分配在了堆区?
  • #3 @lmeng 谢谢,也就是说闭包调用局部变量也是使用的指针是吧
  • 2楼 @CreatCodeBuild package main import "fmt" func main(){ p1:=test() //此时p1被分配到栈上,直到main函数结束 p2:=test() //此时p2被分配到栈上,直到main函数结束 fmt.Println(p1(),p2(),p1()) } func test() func ()int { t:=0 //此时t作为局部变量也存放到栈上,直到不在被引用为止 return func() int { t++ return t } } 我想了一下变量的生存周期,这是我的理解: 首先局部变量的生存周期:从创建一个变量的声明语句开始,直到该变量不再被引用为止。 test()执行结束之后,本该被销毁的t,由于被闭包返回给p1,所以一直处于被引用状态,直到p1被销毁。所以反复执行p1(),t会累加。 这样理解对吗?