每天 10 分钟,学习 JavaScript —— (十九)闭包的缺点及解决

缺点

  • 函数执行完后,函数内的局部变量没有释放,占用内存时间会变长
  • 容易造成内存泄漏
    function fun() {
      var arr = new Array(100000)
      function fn1() {
        console.log(arr.length)
      }
      return fn1
    }
    var f = fun()
    f()
复制代码

解决

  • 及时释放
    function fun() {
      var arr = new Array(100000)
      function fn1() {
        console.log(arr.length)
      }
      return fn1
    }
    var f = fun()
    f()
    f = null // 让内部函数成为垃圾对象
复制代码

内存溢出

  • 一种程序运行出现的错误
  • 当程序运行需要的内存超过了剩余的内存时,就抛出内存溢出的错误
    var obj = {}
    for (var i = 0; i < 10000; i++) {
      obj[i] = new Array(10000000)
    }
复制代码

内存泄漏

  • 程序可正常运行
  • 占用的内存没有及时释放
  • 内存泄漏积累多了就容易导致内存溢出
  • 常见的内存泄漏
    • 意外的全局变量
    function fn() {
      a = 3
      console.log(a)
    }
    fn()
复制代码
    • 没有及时清理的计时器或回调函数
    setTimeout(function () {
      console.log('111')
    }, 1000)
    
复制代码
    • 闭包
    function fn1() {
      var a = 1
      function fn2() {
        console.log(++a)
      }
      return fn2
    }
    var f = fn1()
    f()
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享