闭包与普通函数的区别

wzwmzm · · 1639 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

闭包与普通函数**最大的区别是有两个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

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