闭包--理解

简单讲,闭包就是指有权访问另一个函数作用域中的变量的函数。

MDN 上面这么说闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。

闭包的生成有三个必要条件

  • 函数嵌套函数

  • 内部函数引用了外部函数中的数据(属性、函数)

  • 参数和变量不会被回收

这样就形成了一个不会销毁的函数空间

  • 产生一个闭包

创建闭包最常见方式,就是在一个函数内部创建另一个函数。

先说一个例子,再说说个人理解:

function a() {
  var n = 999;
  function b() {
    console.log(n);
  }
  return b;
}
var result = a();
result(); // 输出999
result(); // 输出1000

a是b的父函数,而b被赋给了一个全局变量,这导致b始终在内存中,而b的存在依赖于a,因此a也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

因此执行第二次result()函数时,n没有被回收,任然保存在内存中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值