什么是闭包,闭包的作用与好处是什么,何时使用闭包,对闭包的改进

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

闭包:外部函数定义的内部函数就是闭包。 闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件。也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义。 与普通函数的区别: 1,普通函数也能曝光内部的值。方法A定义全局变量,但占用的内存无法释放且函数使用的变量定义到了函数外部不便于理解和管理。方法B将内部变量当参数传递,此种方法不美观太丑陋。 2,函数每次执行时都会且只会初始化其内部变量,导致了闭包与普通函数的最大区别。就是每次调用普通函数时它内部都被初始化成一致状态,导致执行的结果是一致的。闭包不同,它的本质是内部函数,调用闭包只会初始化内部函数变量,外部函数的变量没有被初始化,实现了变量值的传递。外部函数只在定义闭包时被初始化。闭包消亡时内存被回收。 什么时候需要使用闭包: 当每次调用函数A时都要改变全局变量B,且B只与A有关。以往没有闭包时只能将B定义为全局变量,现在可以将B定义为A的内部变量,同时在A内部定义闭包C,并将C当值返回。 思考及改进:golang中定义使用闭包有些反人类。所有一切问题的本质在于上面变量B的作用域和生存期的问题,可以有更简便的解决办法。比如启用关键字init, init B int 如此定义后只对B初始化一次,生存期和作用域为所在函数。如此改进后就不再需要闭包的概念了! 此功能必将在未来的版本中实现,特立此贴为证!!!

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

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

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