好处:
1.希望一个变量长期驻扎在内存当中
2.避免全局变量的污染
3.私有成员的存在
用法:
1.模块化代码
2.在循环中直接找到对应元素的索引
模块化代码
var aaa = (function(){
var a = 1;
function bbb(){
a++;
alert(a);
}
function ccc(){
a++;
alert(a);
}
return {
b : bbb,
c : ccc
}
})();
aaa.b(); //2
aaa.c(); //3
alert(a); //报错找不到a,因为这里的a已经私有化了,避免了全局污染
希望一个变量长期驻扎在内存当中
function aaa(){
var a = 1; //程序结束后,这个a的内存不会被释放
return function(){
a++;
alert(a);
}
}
var b = aaa(); //或者不这样赋值调用,而是直接aaa()()这样用
b(); //2
b(); //3
alert(a);//报错找不到a,因为这里的a已经私有化了,避免了全局污染
被污染的a
var a = 1;
function aaa(){
a++;
alert(a);
}
aaa(); //2
aaa(); //3
alert(a);//能够被调用,此时的a为全局
在循环中直接找到对应元素的索引
var aLi = document.getElementsByTagName('li');
for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick = function(){
alert(i);
};
})(i);
}
//当然还可以这样指定索引值来完成
for(var i=0;i<aLi.length;i++){
aLi[i].index=i;
aLi[i].onclick =function(){
alert(this.index)
}
}
在IE下引发内存泄露的处理方法
window.onload = function(){
var oDiv = document.getElementById('div1');
oDiv.onclick = function(){
alert(oDiv.id);
};
window.onunload = function(){ //在最后释放掉内存
oDiv.onclick = null;
};
};