闭包

82 阅读1分钟

什么是闭包?

声明一个变量,声明一个函数,在函数内部访问外部的变量,那么这个函数加这个变量叫做闭包,实际上还是作用域 image.png

闭包的用途是什么?

是使一个函数能访问另一个函数作用域中的变量。形成闭包之后,该变量不会被垃圾回收机制回收

闭包的优缺点是什么?

使用闭包的优点是可以避免全局变量污染

缺点是

  1. 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题

在IE中可能导致内存泄露:

理论上来说,闭包造成内存泄漏就是浏览器的问题,他没有及时的清理内存,所以比较容易造成内存泄漏,实现闭包的垃圾回收要比普通的要难一点,历史上曾经对闭包造成泄露的浏览器有IE6,7之类的,忘了清空了,所以在这些浏览器上少用闭包

解决方法是,在退出函数之前,将不使用的局部变量全部删除。

  1. 闭包会在父函数外部,改变父函数内部变量的值

闭包应用场景

闭包的两个场景,闭包的两大作用:保存/保护

大部分前端JavaScript 代码都是“事件驱动”的,即一个事件绑定的回调方法; 发送ajax请求成功失败的回调;setTimeout的延时回调;或者一个函数内部返回另一个匿名函数,这些都是闭包的应用