什麼是閉包?閉包詳解

    首先要知道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,輸出

那平常使用閉包有什麼好處呢?

優點:

  1. 作用域空間不銷毀,所以變量也不會被銷毀,增加了變量的聲明周期
  2. 在函數外部可以訪問函數內部的變量
  3. 護私有變量,將變量定義在函數內,不會污染全局

缺點:

  1. 因為函數外部可以訪問函數內部的變量,導致變量和內部的函數引用關係一直存在,內存不能銷毀,會一直佔用,使用量較大時會導致內存溢出