golang中的闭包_closure
2024-10-20 16:21:09
闭包_Closure:
1.一般情况下,第一类对象都是独立的封闭的存在的,独立的封闭的起作用;
2.第一类对象可以被创建;
3.第一类对象可以作为参数传递给其他函数;
4.第一类对象可以赋值给变量实体;
5.通常是没有闭包的概念的,因为没有那种特殊的场景;
6.但是在某些编程语言中(Go/PHP/JS/Python/LUA),将函数也设计为第一类对象;
7.所以函数可以在运行时创建,这个太特殊了,这个使得我们可以在调用另一个函数的时候,创建一个新的函数.
8.函数可以作为参数传递给另一个函数;
9.函数可以赋值给变量实体.
10.根据第7条的规则,再加上函数可以引用函数外的变量;这就会导致一种特殊的情况出现,什么情况呢,如果新创建函数有引用外部变量,那么当新函数离开创造它的上下文时(函数运行的栈,这个函数通常是匿名函数),会发现那个它引用的变量,也会一起跟随它一起出来了,并没有随着创建那个变量的上下文的结束而释放. 所以结果是:新函数跟它引用的变量一起如同包装成为一个整体.
11.只要闭包还在被使用,那么闭包引用的变量会一直存在.
12.闭包作用
1:保证局部变量的安全性:闭包内声明的局部变量无法从外部修改,因为函数只能被调用,没有其他操作可以操作其内部代码.
2:将匿名函数作为参数.在另一个函数内部使用其他函数内声明的变量.
3:将闭包的匿名函数作为返回值.类似装饰器设计.比如说一个函数,传入一个值,然后根据这个变量在这个函数内部生产一个闭包,就叫装饰器,然后返回.
最新文章
- vue2.0---组件
- xplan.sql(本脚本获取执行计划显示执行顺序)
- MySQL concat函数的使用
- verilog断言(SVA:systemverlog assertion)语法 ---- 转载
- SAP学习日志--RFC REMOTE FUNCTION CALL
- IE兼容forEach/map/every/some/indexOf/filter
- 基于PHP+Ajax实现表单验证的详解
- eclipse +VISUALSVN SERVER 创建版本控制器,防止误操作(可视化操作,简单方便,不需要修改配置文件)
- Java正则表达式详解
- 【基础】Html跨域跳转问题整理
- struts2使用注解--ACTION中的应用
- java web基础1Tomcat服务器基本知识
- 关于actionscript中新建一个sprite,设置大小(宽高)的问题。
- RFS_javascript的使用
- SQLServer中用户 'sa' 登录失败解决办法
- OWA修改密码注意事项
- Windows BAT字符串操作
- HashMap遍历和使用
- java 中 针对数组进行的工具类
- iOS-xcode代码统计