什麼是閉包?閉包詳解
- 2022 年 10 月 21 日
- 筆記
- javascript
首先要知道JavaScript是使用垃圾回收的語言,它會每隔一段時間就會釋放內存進行閑置資源回收。像函數中的局部變量,函數執行時在內部使用了變量,棧內存會分配空間以保存相應的值。在函數使用結束後,這個局部變量就不需要了,佔用的內存就會被釋放。
那我們若是想要使這個變量不被清理,一直處於被使用中,那就得讓他一直被引用,那麼我們可以在一個函數裏面嵌入一個函數,小函數裏面引用大函數里的變量,並把這個函數返回到全局中,此刻我們便可讓它不被清理並在全局中使用它了
放代碼:
1 function big(){//大函數 2 var savevar = 10;//數據 3 function little(){//小函數 4 return savevar;//引用大函數的數據,並把數據返回出去 5 } 6 return little;//把小函數返回出去 7 } 8 var deal = big();//調用大函數,返回出來小函數 9 console.log(deal); // 返回的是little()這個小函數函數,如果要訪問到num就需要調用這個函數 10 var money = deal(); //調用小函數,返回出來小函數里操作的值 11 console.log(money) // 10,輸出
那平常使用閉包有什麼好處呢?
優點:
- 作用域空間不銷毀,所以變量也不會被銷毀,增加了變量的聲明周期
-
在函數外部可以訪問函數內部的變量
-
護私有變量,將變量定義在函數內,不會污染全局
缺點:
-
因為函數外部可以訪問函數內部的變量,導致變量和內部的函數引用關係一直存在,內存不能銷毀,會一直佔用,使用量較大時會導致內存溢出