閉包特性
函數(shù)嵌套函數(shù)
函數(shù)內(nèi)部可以引用外部的參數(shù)和變量
參數(shù)和變量不會被垃圾回收機制回收
閉包的作用
具體作用是有權訪問函數(shù)內(nèi)部的變量,最常見的就是函數(shù)內(nèi)部創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部的變量。
缺點:就是常駐內(nèi)存,會增大內(nèi)存的使用量,使用不當會造成內(nèi)存泄露。
一般函數(shù)執(zhí)行完畢,局部活動對象就會被銷毀,內(nèi)存中僅僅保存全局作用域,但是閉包會長期駐扎在內(nèi)存。
js垃圾回收
在javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收;(Garbage Collection),計算機科學中一種自動釋放不再被使用的內(nèi)存空間的機制。
如果兩個對象互相引用,而不再被第3者所引用,那么這兩個互相引用的對象也會被回收。
全局變量 count++ 累加
var count = 0;
function testCount(){
count++;
console.log(count);
}
testCount();//result 1
testCount();//result 2
局部變量++ 不累加
function testCount(){
var count=0;
count++;
console.log(count);
}
testCount();//result 1
testCount();//result 1
//到這里會問玩毛線呢 這個我們懂 I know。 我只是想通過這兩個例子來說明閉包的用處和好處。
局部變量count++累加
function testCount(){
var count=0;
return function(){
count++;
console.log(count);
}
}
var plus = testCount(); //函數(shù)賦值給變量
plus(); //plus函數(shù)調用一次,結果為1,相當于testCount()();
plus(); //plus調用第二次,結果為2,實現(xiàn)了局部變量累加了。
//閉包會使變量始終保存在內(nèi)存中,如果使用不當會增大內(nèi)存消耗。