什麼是閉包?閉包詳解

    首先要知道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. 因為函數外部可以訪問函數內部的變數,導致變數和內部的函數引用關係一直存在,記憶體不能銷毀,會一直佔用,使用量較大時會導致記憶體溢出