js 推荐闭包一些实用的方法和一些注意事项(持续更新)

1.闭包实用方法

  1. 匿名自执行函数

    我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一次,其内部变量无需维护,那么我们可以使用闭包:

    如页面加载完给多个li改变文本   

        
//将全部li字体变为红色
        (function(){
        var els = document.getElementsByTagName('li');
          for(var i = 0,lng = els.length;i < lng;i++){
             els[i].style.color = 'red';
         } 

      })(); 

  

    

    我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,
    因此els,i,lng这些局部变量在执行完后很快就会被释放,节省内存!
    关键是这种机制不会污染全局对象。

  

  2. 实现封装/模块化代码

   

var person= function(){    

       //变量作用域为函数内部,外部无法访问    
      var name = "default";       

      return {    
         getName : function(){    
             return name;    
         },    
         setName : function(newName){    
             name = newName;    
         }    
      }    
   }();
   console.log(person.name);//直接访问,结果为undefined    
   console.log(person.getName());  //default 
   person.setName("loren");    
   console.log(person.getName());  //loren

  

  


2. 内存泄露及解决方案

  内容泄漏大多数都是变量循环调用没有即时的清理,所以一直存在内存里面。


  清理方法
  
   var obj = {   //  定义变量
    x:1
   }
   obj = null;   // 清除变量
 

3. 总结闭包的优缺点

  优点:

    可以让一个变量常驻内存 (如果用的多了就成了缺点

    避免全局变量的污染 

    私有化变量

  缺点

    因为闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存

    引起内存泄露





 

posted @ 2018-06-22 17:02  loren.wang  阅读(146)  评论(0编辑  收藏  举报