闭包的好处罗列

好处:
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;
    };
    
};

 

posted @ 2017-01-17 20:59  Model-Zachary  阅读(250)  评论(0编辑  收藏  举报