一、闭包是什么?
答:在一个外部函数内部定义了一个内部函数,并且内部函数可以引用外部函数的局部变量,那么这个函数就是一个闭包。
简单理解:闭包 = 内部函数 + 外部函数的变量
简单的闭包代码:
function outer() {
let count = 1
function inner() {
console.log(count)
}
inner()
}
outer()
二、闭包的用途/特点
- 封装私有变量和方法
- 让变量始终保持在内存中
- 延长变量的生命周期
三、闭包的优点
- 可以减少全局变量的定义,避免全局变量的污染
- 能够读取函数内部的变量
- 在内存中维护一个变量,可以用做缓存
四、闭包的缺点
1.内存消耗:
- 闭包会使得函数中的变量和方法在函数执行结束后仍然占用内存,因为闭包中引用的外部变量不会被释放。如果闭包持有大量数据或者长时间存在,可能会导致内存占用过高,影响程序的性能。
2.性能问题
- 由于闭包涉及作用域链的查找,访问闭包内部变量的速度可能比普通函数略慢。尤其是在频繁调用的情况下,闭包的性能表现可能会受到影响。
3.可能导致内存泄漏
- 闭包会使函数中的变量一直保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。【内存泄露:无用的变量一直在内存中,无法被释放】
解决方法——使用完变量后,手动将它赋值为null;