标签:
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