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