首页 > 代码库 > js闭包

js闭包

闭包的概念一直很模糊,闭包究竟是什么呢?

//函数嵌套函数,内部函数可以引用外部函数的参数变量,参数和变量不会被垃圾回收机制收回,因为内部函数bbb()引用aaa()的变量function aaa(a){   var b = 5;   function bbb(){         alert(a);         alert(b)}}aaa();//js中的垃圾回收机制function aaa(){   var a = 1;}  aaa();
//简单的闭包例子。判定a没有被垃圾回收机制收回function aaa(){    var a = 5;    function bbb(){        alert(a)  }
//定义一个全局变量a,实现累加功能var a = 1;function aaa(){     a++;     alert(a);     }alert(a);   //2alert(a);   //3//定义一个私有变量a,不能实现累加function aaa(){    var a = 1;    a++;    alert(a)}alert(a);//2alert(a);//2//闭包的好处,即使a不是全局变量也能实现累加function aaa(){    var a = 1;    return function(){         a++;         alert(a)  }}var c = aaa();c();//2c();//3alert(a)//报错找不到//函数声明和函数调用function aaa(){  alert(a)}aaa();//函数表达式(function aaa(){alert(1)})()//改写闭包,模块化代码,减小全局变量的污染var aaa = (function(){  var a = 1;return function(){  a++;  alert(a)}})()aaa()//2aaa()//3//私有成员的存在var aaa = (function(){   var a = 1;//局部变量   //bbb(),ccc()私有方法   function bbb(){      a++;      alert(a)  }   function ccc(){     a++;     alert(a);  }  return {    b:bbb,    c:ccc}})();aaa.b();//2aaa.c();//3alert(a);//报错alert(bbb);//报错alert(ccc);//报错
//在循环中找到对应元素的索引<script>  var aLi = document.getElementByTagName(‘li‘);//方法1  for(var i = 0 ; i<aLi.lenght; i++){       (function(i){           aLi[i].onClick = function(){            alert(i);    }       })(i)  }//方法2for(var i = 0 ; i<aLi.lenght; i++){           aLi[i].onClick = (function(i){            return function(){                alert(i);       }    })(i)  }     </script><body><ul><li>111111</li><li>111111</li><li>111111</li></ul></body>

 

return bbb;} var c=aaa();c()
<script>//IE下引发内存泄露var oDiv = docudment.getElementById(‘div1‘);oDiv.onClick = function(){  oDiv.onClick = function(){    alert(oDiv.id); };//解决方法一  window.onunload =  function(){     oDiv.onClick = null;  }}</script><script>//IE下引发内存泄露var oDiv = docudment.getElementById(‘div1‘);oDiv.onClick = function(){var oDiv = oDiv.id;  oDiv.onClick = function(){    alert(oDiv); };//解决方法二   oDiv = null;}</script><body><div id="div1">aaa</div></body>

闭包的讲解视频,在网上找到的讲的很好:http://v.youku.com/v_show/id_XNzkwNzM4NTc2.html

js闭包