前情提要
闭包是前端常见的一个技术点,项目中如果使用不当的话,也会引起内存泄露,在此对闭包做一个小小的总结。
JavaScript 闭包
// 代码中函数 a 的内部函数 b ,被函数 a 外面的一个变量 c 引用的时候,这就创建了一个闭包
// 有时候函数 b 也可以用一个匿名函数代替来返回 即 return function(){}
// 函数 a
function a {
var i = 0
// 函数 b
function b { // 函数 b 嵌套在函数 a 内部
console.log(++i)
}
return b // 函数 a 返回函数 b
}
// 函数 c
var c = a()
c()
// 闭包之所以会占用资源 —— 因为当函数 a 执行结束后,变量 i 不会因为函数 a 的结束而销毁,因为 b 的执行需要依赖 a 中的变量
优点
- 保护函数内的变量安全,加强了封装性
- 在内存中维持一个变量(用的太多就变成了缺点,占内存)
缺点
- 常驻内存,会增大内存使用量,使用不当很容易造成内存泄露(造成无效内存产生)
不适合场景
- 返回闭包的函数是个非常大的函数
典型框架
jquery- 框架中 —— 有些方法和属性只是运算逻辑过程中的使用的,不想让外部修改这些属性,因此可以设计一个闭包来只提供方法获取
主要应用场合
- 设计私有的方法和变量