JavaScript很多書籍都講的唧唧歪歪一大堆,不知道講些什麼
1、什麼是閉包
-- 函數嵌套函數
-- 內建函式可以引用外部函數的參數和變數
-- 參數和變數不會被記憶體回收機制回收
<script type="text/javascript"> //1.1函數嵌套函數 function Rabbit() { function shortHairGirl() { } } //1.2內建函式可以引用外部函數的參數和變數 function Rabbit2() { var name="rabbit";//Rabbit2()執行完畢的時候,js記憶體回收行程並沒有對其回收 //因為shortHairGirl()對其還有引用 function shortHairGirl() { alert(name); } return shortHairGirl; } var loveShortHairGirl=Rabbit2(); //loveShortHairGirl(); //1.3參數和變數不會被記憶體回收機制回收 function GC() { var girl="我是短髮美女"; } GC();//當GC()執行完畢的時候,變數girl就會被js記憶體回收行程,節省記憶體 </script>
2、閉包的好處
--希望一個變數長期駐紮在記憶體當中,避免全域變數的汙染
//2.1沒有使用閉包 var girlAge=23; function IncAge() { girlAge++; alert("短髮美女的芳齡是:"+girlAge); } //IncAge();//24 //IncAge();//25 function IncAge2() { var girlAge=22; girlAge++; alert("短髮美女的芳齡是:"+girlAge); } //IncAge2();//23 //IncAge2();//23 function RabbitLoveGirl() { var age=22; return function(){ age++; alert(age); } } var girlAge=new RabbitLoveGirl(); //girlAge(); //girlAge(); //如果一個函數放在()中,那麼就變成了函數運算式 ( function aaa(){ alert(2); } )(); (function(){ alert("shit"); })(); var age=(function(){ var a=10; return function(){ a++; alert(a); } })(); age(); age(); </script>
3、 閉包需要注意的地方【IE下可能引發記憶體泄露】,就不舉例了。
4、望眼欲穿,不見一個短髮女孩出現。於是乎,我來到了海邊.....