闭包
闭包
- 闭包是指有权访问另一个函数作用域中的变量的函数
- 当内部函数被保存到外部时,将会生成闭包。
- 闭包会导致原有作用域链不释放,造成内存泄露。
- 内存泄漏就是内存占用,内存被占用的越多,内存就变得越来越少了,就像内存被泄露了一样
- 闭包会导致多个执行函数共用一个公有变量,污染全局变量。
- 但凡是内部的函数被保存到外部,一定生成闭包
function a() {
var num = 100;
function b () {
num ++;
console.log(num);
}
return b;
}
var demo = a();
demo();
demo();
-
a 被执行时
- 0 : aAO: num = 100;
- 1 : GO: demo = a();
-
b 被执行
- 0 : bAO;
- 1 : aAO : num = 100;
- 2 : GO: demo = a();
在第一次执行 function b 时,num ++就把 aAO 变成{num : 101},当 function b 执行完毕时,剪断的是 bAO,而 aAO 不变,当执行 function a 的 return b 时就把 aAO,GO 都29
存在了外部,执行完 a 销毁 scope 时去掉 a 的连接线,但是因为 return b 把 aAO,GO
存在了外部,所以依然还是可以访问值
在第二次执行 function b 时,aAO{num : 101},在 num ++就是 102
闭包的作用
- 实现公有变量
- 可以做缓存(存储结构)
-
可以实现封装,属性私有化。
-
模块化开发,防止污染全局变量
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/12561857.html