JavaScript 闭包

一、定义

  谈及闭包这个概念首先要明白为什么需要使用闭包。我们在编写代码的过程中,一定会遇到多人开发的问题,既然是多人开发,变量的命名就很可能会重复,为了解决这个问题就提出了闭包的概念。通过闭包就可以实现在函数外通过一定条件操作局部变量的目的。

二、组成

  闭包由两部分组成:内层函数和内层函数所处的作用域(即有函数的嵌套才构成闭包),比如下面inner函数和其所处的作用域就构成了闭包。

function foo() {
    var n = 456;
    function inner() {
      n += 1;
      return n;
    }
    return inner;
}
var inner = foo();
var ret = inner();
ret = inner();
console.log(ret)

  上面这段代码的结果是458,可以看到在外部inner函数被调用执行了两次,第二次变量值在第一次的基础上+1,就可以看出,变量n在函数执行后仍然存储在内存中,而没有回收。

三、优缺点

  • 优点(作用):隔离私有空间,防止全局污染;可以在函数外面有条件访问内部变量;延长变量的生命周期(能够延长也是因为变量没有被回收)
  • 缺点:由于内层函数在外部被调用,所有外层函数内的局部变量不能回收(一直保存在内存中),这就会造成内存被占用严重的问题,在IE浏览器中严重的话会发生内存泄漏。

四、内存泄漏问题解决方案

  对变量在外层函数内进行手动释放(置为null)

posted @ 2019-08-14 16:43  刘彤彤  阅读(132)  评论(0编辑  收藏  举报