什么情况下会形成闭包,什么是闭包

闭包(Closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包

可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员

下面来看一个比较简单的例子:

首先,当我们执行makeFn这个函数,正常情况下,如果没有后面的return function,当执行完makefn这个函数的时候,里面的变量msg会被释放掉, 加上后面的

return function并且在执行完makefn()之后,相当于引入了return后面的function,在这个function里面对外面的msg有引用,导致msg不能被释放掉,这就是闭包!

下面来个例子希望大家可以理解的深刻一点:

首先,这个创建once函数实际上是执行的实际是return后面的函数,这个函数里面引用了本函数外面的done变量,once函数执行完之后done变量会被缓存下来,第一次执行获取到done

变量,改变done为true,所以第二次就不会走这个条件语句,只执行一次。

闭包的本质:函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能被释放,因此内部函数依然可以访问
外部函数的成员。

再来一个例子:

第一步,创建makeSala1变量,实际上执行makeSala1变量返回的是第一个return函数
第二步,执行打印makeSala1函数,返回的是第二个return函数,形成闭包,获取了内存中的base,返回最终结果。

最新文章

  1. Hibernate的性能优化问题
  2. Fix the iOS code signing issue when using Jenkins
  3. 【HTML5】标记文字
  4. 按键消抖-----verilog
  5. 【axc】关于duplicate symbols for architecture x86_64错误的第三种可能及其解决办法
  6. bootstrap插件学习-bootstrap.carousel.js
  7. 【转】Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticat
  8. LevelDB源码剖析
  9. exynos 4412 电源管理芯片PMIC 的配置及使用方法
  10. 关于echarts绘图,主题的更换
  11. hdu_4507_吉哥系列故事——恨7不成妻(鬼畜数位DP)
  12. linux通过history查看命令执行时间
  13. python基本数据类型——set
  14. Galaxy2D Game Engine 4.2
  15. linux安装php7.2.7
  16. boolalpha的作用
  17. CSS 显示或隐藏子元素
  18. js中将文件的base64转换成file并上传到服务器
  19. 牛客国庆集训派对Day7 Solution
  20. Spring quantz--定时任务调度工具

热门文章

  1. 第11.1节 Python正则表达式概述
  2. 第9.12节 Python中其他文件操作方式
  3. LeetCode初级算法之数组:122 买卖股票的最佳时机 II
  4. 算法——移掉K位数字使得数值最小
  5. 七、git学习之——使用GitHub、自定义Git、
  6. 关于Android手机CPU不同架构的问题
  7. 将命令行提示符里的执行结果导出到text文件中
  8. vscode 编辑python文件
  9. TP学习—第一天:框架的简单学习;创建应用;
  10. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue