闭包的概念:闭包就是能读取其他函数内部变量的函数。
-
避免全局变量的污染
-
希望一个变量长期存储在内存中(缓存变量)
缺点:
-
内存泄露(消耗)
-
常驻内存,增加内存使用量
使用场景:封装功能时(需要使用私有的属性和方法),函数防抖、函数节流、函数柯里化、给元素伪数组添加事件需要使用元素的索引值。
造成内存泄露的原因
-
意外的全局变量(在函数内部没有使用var进行声明的变量)
-
console.log
-
闭包
-
对象的循环引用
-
未清除的计时器
-
DOM泄露(获取到DOM节点之后,将DOM节点删除,但是没有手动释放变量,拿对应的DOM节点在变量中还可以访问到,就会造成泄露)