闭包
闭包(Closure)
作用
- 避免变量全局污染
- 使数据私有化,外部无法修改内部数据
- 可以让外部可以使用内部的私有数据
以上三点其实都是函数的作用,而不是闭包的独特作用
!闭包的核心作用是:使变量可以驻留在内存,不被回收
代码讲解
let a = 10; |
结果输出为11,12,13
但是此时a为全局变量,如果别人不小心对a又重复赋值了,那么结果就不是我们预期的结果
那此时我们就不让a成为全局变量,把a的定义放在函数内部,让a成为函数的私有变量
function fn(){ |
此时就可以满足上面提到的函数的作用(第三条只要加个return就可以实现)
但是问题出现了:这次的结果三次都为11,这是因为函数在执行完一次后里面的变量就会被释放掉,下一次执行时又会重新对a进行赋值,所以结果一直为11
创建闭包
function fn(){ |
条件:
- 必须有个子函数
- 子函数必须要调用父函数里面的变量
实现自增的原因:
- 执行的是f(),所以实际上执行的是子函数b,fn只在给f定义的时候执行了一次,所以后面let a = 10也没有被执行
- 闭包函数内的变量可以保存下来
我的疑惑:
- 为什么要在下面重新定义一个f函数
- 为什么要加return A :1.因为要返回b函数? 2.最后f调用的是a变量,(如果外部想要使用闭包里面的变量,就要用return?)
补充
内存泄漏
变量长时间驻留在内存,如果处理不当可能造成内存泄漏,所以用完可以手动清除
在最后加上下面的代码即可
f = null; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 YUN's Blog!