1.闭包的定义
闭包就是能够读取其他函数内部变量的函数。在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
2.应用场合
设计私有的方法和变量
当我们需要让局部变量发挥全局变量的作用时,可以考虑使用闭包
3.优点
(1)封装性 将变量私有化 不会污染全局变量
(2)缓存性 可以让变量的值始终保持在内存中,不会在函数被调用以后被自动清除
4.缺点
(1)内存消耗
通常来说,函数的活动对象会随着执行期上下文一起销毁,但是,由于闭包引用另外一个函数的活动对象,
因此这个活动对象无法被销毁,这意味着,闭包比一般的函数需要更多的内存消耗。
尤其在IE浏览器中需要关注。由于IE使用非原生javascript对象实现DOM对象,因此闭包会导致内存泄露问题
解决办法 在退出之前 将不使用的局部变量全部删除
(2)性能问题
使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。
因此在脚本中,最好小心使用闭包,它同时会涉及到内存和速度问题。
不过我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。
闭包的典型框架是 jquery