Closure闭包
概念:
- 一个函数对周围状态的引用捆绑在一起,闭包让开发者可以从内部函数访问外部函数的作用域
- 简单理解:闭包 = 内层函数 + 外层函数的变量
作用:
- 实现数据的私有,避免全局污染,外层函数也可以访问里层函数变量
- 例如:
- 要做个统计函数调用次数,函数调用一次,就++
- 这样实现了数据私有,无法直接修改count
标记清除法-闭包产生的问题
- i变量在count函数里面,是一个局部变量,当count()调用执行完之后,按理说它应该被回收掉
- 但是现在,我们们每次调用bar()的时候,一直都访问到了这个i变量。
- 标记清除法:从全局作用域触发,能访问到的变量/变量标记为活动对象,不回收
- 这个i变量本来应该被回收,现在一直存在内存里面,所以造成了内存泄漏