码迷,mamicode.com
首页 > Web开发 > 详细

js-闭包

时间:2016-05-04 17:20:56      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

  

js-闭包

标签:

原文地址:http://www.cnblogs.com/onlybesile/p/5458834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!