js中的闭包

Posted ghostdot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中的闭包相关的知识,希望对你有一定的参考价值。

  1. 什么是闭包:当内部函数保存到外部时,导致原有的作用域链不被释放,闭包容易造成内存泄露
   function demo() //demo()的作用域 demo --[AOGO] 即自己的作用域和全局的作用域
     var a; 
      function b() //b()的作用域 b -- [AODemoAoGO] 自己的作用域和父级的作用域
          console.log('b')
      
      return b //内部函数被保存到外部 
   
   var c = demo()  //正常情况下dmeo()执行完后,AO会被垃圾回收机制回收,但是因为存在b()还在用dmeo()的AO,所以不会被垃圾会收机制给回收
   // c是一个全局的引用,所以只有等到全局结束后demo的Ao才会被释放
   c()  
  1. 闭包的作用
    2.1 实现公有变量的累加
    function demo()
        var a = 0;
        function test()
            a ++;
            console.log(a)
        
        return test
    
    var c = demo()
    c() //1
    c() //2
    c() //3
    //a 每次执行会在原来的基础上增加一次, 原因是demo的AO,被保存到外部后就不会再次生成,所以c执行都拿着原来的demo的AO在自加

2.2 可以做缓存

   function num()
             var a = 100;
             function add()
                 a ++;
                 console.log(a)
             
             function sub()
                 a --;
                 console.log(a)
             
             return [add, sub]
         
         var demo = num() //说明两个用的是同一个AO
         demo[0](); //101
         demo[1](); //100
         demo[0](); //101

2.3 可以实现封装,属性私有化,模块化开发防止变量污染全局

     (
         function(doc)
            var a = 100; // a就只可以在obj内使用不会污染全局变量
            var obj = 
                add: function(a, b)
                      return a + b
                ,
                sub:function()
                     return a - b
                
                
            
            window.obj = obj
         (1)
     )
  console.log( obj.add(3, 5)) 

以上是关于js中的闭包的主要内容,如果未能解决你的问题,请参考以下文章

js闭包的问题。

初识js中的闭包

JS中的闭包

深入理解闭包中的委托

Js中的闭包

js 中的闭包