什么是闭包
简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数。
为什么需要闭包呢
局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染。
特点
1.占用更多内存
2.不容易被释放.
何时使用
既想反复使用,又想避免全局污染
如何使用
1.定义外层函数,封装被保护的局部变量。
2.定义内层函数,执行对外部函数变量的操作。
3.外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中。
使用闭包需要注意
1.由于闭包内的部分资源无法自动释放,容易造成内存泄露 解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2.闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
让你分分钟理解 JavaScript 闭包
http://www.xurry.top/2017/09/06/javascript-closure/
图解JS闭包
https://zhuanlan.zhihu.com/p/27857268
如何才能通俗易懂的解释javascript里面的‘闭包’?
https://www.zhihu.com/question/34547104
JavaScript 里的闭包是什么?应用场景有哪些?
https://www.zhihu.com/question/19554716
https://zhuanlan.zhihu.com/p/27669892?utm_source=com.daimajia.gold&utm_medium=social
闭包特性:当前作用域总是能够访问外部作用域中的变量。或者说闭包是一个访问父函数局部变量的函数。作用:延长局部变量的生命周期,封装私有变量。闭包引用的作用域不会被垃圾回收处理,当然不合理的使用会耗内存.