闭包与普通函数的区别

wzwmzm · 2016-12-19 04:35:48 · 1807 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-12-19 04:35:48 的主题,其中的信息可能已经有所发展或是发生改变。

闭包与普通函数最大的区别是有两个return, 而且都被顺序执行了,普通函数只能return一次就彻底跳出函数了。比如:

1,func closure1() func() int{
2,    i :=0
3,    return func() int{
4,        i++ 
5,        return i
6,    }
7,}
8, f := closure1()
9, fmt.Println(f())
10,fmt.Println(f())
11,fmt.Println(f())
12,fmt.Println(f())

此例中1-7行定义了闭包函数closure1,8-12行为主程序执行过程。我们现在来走一遍主程序,第8行 f 被赋予closure1的引用地址;第9行时执行 f 函数,此时 f 函数为closure1的地址,从第2行开始执行,执行到第3行时return了func的地址,此时 f 被改为了 func 的地址!这就是关键之处。 继续进入执行 f 函数,此时的f 函数从第4行开始,执行到第5行,返回i =1,至此第9行执行完毕;第10行时再次执行f 函数,此时的f 函数还是从第4行开始执行,第5行返回 i=2; 以后略同。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1807 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传