JavaScript基础 闭包 2

闭包:

形成闭包的条件:

  • 1、函数嵌套函数(有作用域的嵌套)
  • 2、内部函数使用了外部的变量/参数

作用:

  • 内部函数使用的外部函数变量/参数会被永久的保存
例:


~function (){       //函数1
    var num = 0;      // 外部变量
    document.onclick  = function (){   //  函数2       函数嵌套函数
          num ++;      //  内部调用到外部变量  
          console.log( num )
     }
}();

符合上面的条件:形成一个闭包  num 永久的保存

垃圾回收机制
+当所有环境都还在有对某个对象/数据的引用时,这个数据会被回收的

1、变量引用时:
var a = [ 1 , 2 , 3 ]
          .
          . 代码     中间这分部不会被回收
          ...
alert( a );
          .
          .没有对a再引用   这时候a就会被回收
          .
          ...

2、函数引用时
function fn(){
    var b = 0;
    b++;
    alert( b );
}
    .
    . 代码 fn里的 var b = 0   b++ alert( b )  不会被回收
    ....
fn();
    .
    . 下面的代码没有对fn引用  fn里的函数体会 var b = 0   b++ alert( b ) 被回收掉
    ....

案例分析:



JavaScript基础 闭包 2_第1张图片
图解

闭包的优缺点:

  • 闭包的优点就是缺点
    使用的变量会被永久存储(只有关闭页面时才会被释放),我们可以对同一个变量重复利用


缺点

  • 使用变量会被永久保存,当大量使用闭包时,会对内存的消耗有点点高

你可能感兴趣的:(JavaScript基础 闭包 2)