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;
    
};
原文地址:https://www.cnblogs.com/leejersey/p/3550869.html