闭包
形成原因
只要内部函数保存到外部, 就会生成闭包
优点 & 缺点
-
优点
闭包可以让功能模块化, 让缓存可以进行, 可以做存储结构
可以实现封装, 以及属性的私有化 -
缺点
会导致作用域链不可释放, 造成内存泄漏
闭包示例
代码示例:
这个可以作为一个计数器来使用
function a(){
var num = 0;
function b(){
num ++;
console.log('num: ' + num);
}
return b;//将函数返回到外部, 形成闭包
}
var test = a();//用来接收函数
执行效果:
作用
- 外部变量会接收生成闭包的函数的函数体以及闭包生成函数内的所有局部变量
- 如上面的例子, 显然执行完函数 a() 后, 函数会被销毁, 同时其局部变量表 AO 也会被一同销毁, 显然 AO 并没有被销毁, 而是被闭包一起带了出来.
- 若想一次返回多个函数, 可以在对象里面进行封装.
- 每次调用闭包中的函数时, 它的局部变量即函数体的 AO 都会被刷新
- 可以用立即执行函数来使变量值在循环中有效存入数组中
- 但凡生成索引的时候, 要注意有无闭包生成