闭包_Closure:
1.一般情况下,第一类对象都是独立的封闭的存在的,独立的封闭的起作用;
2.第一类对象可以被创建;
3.第一类对象可以作为参数传递给其他函数;
4.第一类对象可以赋值给变量实体;

5.通常是没有闭包的概念的,因为没有那种特殊的场景;
6.但是在某些编程语言中(Go/PHP/JS/Python/LUA),将函数也设计为第一类对象;
7.所以函数可以在运行时创建,这个太特殊了,这个使得我们可以在调用另一个函数的时候,创建一个新的函数.
8.函数可以作为参数传递给另一个函数;
9.函数可以赋值给变量实体.

10.根据第7条的规则,再加上函数可以引用函数外的变量;这就会导致一种特殊的情况出现,什么情况呢,如果新创建函数有引用外部变量,那么当新函数离开创造它的上下文时(函数运行的栈,这个函数通常是匿名函数),会发现那个它引用的变量,也会一起跟随它一起出来了,并没有随着创建那个变量的上下文的结束而释放. 所以结果是:新函数跟它引用的变量一起如同包装成为一个整体.

11.只要闭包还在被使用,那么闭包引用的变量会一直存在.

12.闭包作用
  1:保证局部变量的安全性:闭包内声明的局部变量无法从外部修改,因为函数只能被调用,没有其他操作可以操作其内部代码.
  2:将匿名函数作为参数.在另一个函数内部使用其他函数内声明的变量.
  3:将闭包的匿名函数作为返回值.类似装饰器设计.比如说一个函数,传入一个值,然后根据这个变量在这个函数内部生产一个闭包,就叫装饰器,然后返回.

最新文章

  1. vue2.0---组件
  2. xplan.sql(本脚本获取执行计划显示执行顺序)
  3. MySQL concat函数的使用
  4. verilog断言(SVA:systemverlog assertion)语法 ---- 转载
  5. SAP学习日志--RFC REMOTE FUNCTION CALL
  6. IE兼容forEach/map/every/some/indexOf/filter
  7. 基于PHP+Ajax实现表单验证的详解
  8. eclipse +VISUALSVN SERVER 创建版本控制器,防止误操作(可视化操作,简单方便,不需要修改配置文件)
  9. Java正则表达式详解
  10. 【基础】Html跨域跳转问题整理
  11. struts2使用注解--ACTION中的应用
  12. java web基础1Tomcat服务器基本知识
  13. 关于actionscript中新建一个sprite,设置大小(宽高)的问题。
  14. RFS_javascript的使用
  15. SQLServer中用户 'sa' 登录失败解决办法
  16. OWA修改密码注意事项
  17. Windows BAT字符串操作
  18. HashMap遍历和使用
  19. java 中 针对数组进行的工具类
  20. iOS-xcode代码统计

热门文章

  1. 【Android面试揭秘】面试官说“回去等通知”,我到底会不会等来通知?
  2. Java代码编写、代码优化技巧总结
  3. Build VM Cluster on CentOS Host
  4. 使用Eclipse下载CRaSH源代码
  5. 披着羊皮的Neo-reGeorg
  6. Slope Trick:解决一类凸代价函数DP优化
  7. Linux从头学08:Linux 是如何保护内核代码的?【从实模式到保护模式】
  8. Docker创建seafile搭建私有云
  9. SQL Server中的group by(分组)
  10. mfc HackerTools全局钩子