Closure闭包

54 阅读1分钟

Closure闭包

概念:

  • 一个函数对周围状态的引用捆绑在一起,闭包让开发者可以从内部函数访问外部函数的作用域
  • 简单理解:闭包 =  内层函数 + 外层函数的变量

作用:

  • 实现数据的私有,避免全局污染,外层函数也可以访问里层函数变量
  • 例如:
  • 要做个统计函数调用次数,函数调用一次,就++
  • image.png
  • 这样实现了数据私有,无法直接修改count

标记清除法-闭包产生的问题

  • image.png
  • i变量在count函数里面,是一个局部变量,当count()调用执行完之后,按理说它应该被回收掉
  • 但是现在,我们们每次调用bar()的时候,一直都访问到了这个i变量。
  • 标记清除法:从全局作用域触发,能访问到的变量/变量标记为活动对象,不回收
  • 这个i变量本来应该被回收,现在一直存在内存里面,所以造成了内存泄漏