func test() func() string { s := "a" return func() string { return s+"a" } }
func test() func() string { s := "a" return func() string { s += "a" return s } } 为啥只有下面这个才是闭包
有疑问加站长微信联系(非本文作者)

func test() func() string { s := "a" return func() string { return s+"a" } }
func test() func() string { s := "a" return func() string { s += "a" return s } } 为啥只有下面这个才是闭包
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
应该是所引用的变量s没有发生变化
可以参考这里:https://www.ibm.com/developerworks/cn/linux/l-cn-closure/index.html#note_3
你是通过什么判断第一个不是闭包的?
实现闭包的条件:
1、定义的函数返回了一个函数对象
2、且返回的这个函数引用了其作用域外部的变量(一般称自由变量,由主函数传入,但也可以是主函数内部 && 子函数外部作用域内定义的局部变量)
3、语言支持。
go是通过匿名函数支持的闭包,而你定义的两个函数都是符合前两个条件的,如何又来不是闭包一说?
输出:
同意三楼
1也是闭包: 只是你没有用它作什么事! go的闭包和所有支持函数式变成的 闭包都是一样的