首页 > 代码库 > 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闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。