js中的閉包其實是對于局部作用域的保持,如果沒有這個特性栈顷,便無法取到函數(shù)內(nèi)局部作用域內(nèi)的私有變量逆日。函數(shù)內(nèi)部以子函數(shù)引用父函數(shù)變量的形式返回一個所謂的閉包,既私裝有來自私密空間的空氣的一個包裹萄凤,帶著這個包裹到哪里室抽,你都可以打開小口,呼吸一下原汁原味的密閉空間里的空氣靡努。
其實在js的模塊化中我們也經(jīng)常用這種手段來處理坪圾。通過函數(shù)來創(chuàng)造一個不受打擾的私密空間,通過閉包來返回一個對外暴露的接口惑朦。如下:
(function(){
var name = 'jalon';
var age = 25;
function getName() {
return name;
}
function getAge() {
return age;
}
return {
getAge: getAge,
getName: getName
}
})();
注意避免循環(huán)引用兽泄,這樣在ie9下的瀏覽器中會不予回收,內(nèi)存泄露:
如
obj.prop2 = function(){
console.log(obj.prop1) ;
}
會造成obj無法回收