标签:
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; }
标签:
原文地址:http://www.cnblogs.com/onlybesile/p/5458834.html