js-闭包

1.什么是闭包
函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制给收回

function a(x){
   var y=1;
   function b(){
      alert(x);
      alert(y);
   }
}
a()
js中的垃圾回收机制
function aa(){
   var a=1;
}
aa();

  2.闭包有什么好处?应用在那里
 好处:1.希望一个变量长期停留在内存中
         2.可以避免全局变量的污染

      var a=1;
       function aaa(){
          a++;
          alert(a);
       }
       改进
       function aaa(){
          var a=1;
          return function(){
              a++;
              alert(a);
          }
       }
       var b=aaa();
       b();
       b();

  3.私有成员的存在

        var aaa=(function(){
          var a=1;
          function bbb(){
             a++;
             alert(a);
          }
          function ccc(){
             a++;
             alert(a);
          }
          return {
             b:bbb,
             c:ccc
          }
       })()

   //应用
       1.模块化代码
       2.在循环中找到对应元素的索引

<ul>
   <li>111</li>
   <li>222</li>
   <li>333</li>
 </ul>
 var ali=document.getElementByTagName('li');
 for(var i=0;i<ali.length;i++){
     ali[i].onclick=function(){
      alert(i);
 }

 (function(i){
    ali[i].onclick=function(){
      alert(i);
    }
 })(i);

 ali[i].onclick=(function(){
     return funciton(){
        alert(i);
     }
 })(i);
  }

  3.闭包需要注意的地方
在IE下有内存泄漏

window.onload=function(){
     var odiv=document.getElementById("div1");
     odiv.onclick=funciton(){
          alert(odiv.id);
     }
     //第一种方法
     window.onunload=function(){
        odiv.onclick=null;
     }
     //第二种方法
     var odiv=document.getElementById("div1");
     var id=odiv.id;
     odiv.onclick=function(){
         alert(id);
     }
     odiv=null;
}

  

posted @ 2016-05-04 16:13  兰炫  阅读(179)  评论(0)    收藏  举报