js閉包


1.什么是閉包?

函數嵌套函數,內部函數可以引用外部函數的參數和變量,參數和變量不會被垃圾回收機制所收回

function aaa(a){
    
    var b = 5;

    function bbb(){
        alert(a);
        alert(b);
    }

}

aaa();
//JS中的垃圾回收機制

function aaa(){
    
    var a = 1;
    
}

aaa();
function aaa(){
    var a = 5;
    function bbb(){
        alert(a);
    }
    return bbb;
}

var c = aaa();

c();

 


2.閉包有什么好處?應用在那里?

1.希望一個變量長期駐扎在內存當中
2.避免全局變量的污染
3.私有成員的存在

1.模塊化代碼

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);
//alert(bbb);
alert(ccc);

 


2.在循環中直接找到對應元素的索引

window.onload = function(){
    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].onclick = (function(i){
            
                return function(){
                    alert(i);    
                }
                
            })(i);

        
    }
    
};

 


3.閉包需要注意得地方?

 

//IE下會引發內存泄漏

/*window.onload = function(){
    var oDiv = document.getElementById('div1');
    
    oDiv.onclick = function(){
        alert(oDiv.id);
    };
    
    window.onunload = function(){
        oDiv.onclick = null;
    };
    
};*/

window.onload = function(){
    var oDiv = document.getElementById('div1');
    
    var id = oDiv.id;
    
    oDiv.onclick = function(){
        alert(id);
    };
    
    oDiv = null;
    
};

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM