闭包

闭包

  • 闭包是指有权访问另一个函数作用域中的变量的函数
  • 当内部函数被保存到外部时,将会生成闭包。
  • 闭包会导致原有作用域链不释放,造成内存泄露。
    • 内存泄漏就是内存占用,内存被占用的越多,内存就变得越来越少了,就像内存被泄露了一样
  • 闭包会导致多个执行函数共用一个公有变量,污染全局变量。
  • 但凡是内部的函数被保存到外部,一定生成闭包
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

闭包的作用

  1. 实现公有变量

  1. 可以做缓存(存储结构)

  1. 可以实现封装,属性私有化。

  2. 模块化开发,防止污染全局变量

posted @ 2020-03-24 20:55  懒惰ing  阅读(132)  评论(0编辑  收藏  举报