函數嵌套函數 函數內部能夠引用外部的參數和變量 參數和變量不會被垃圾回收機制回收
具體做用是有權訪問函數內部的變量,最多見的就是函數內部建立另外一個函數,經過另外一個函數訪問這個函數的局部的變量。
缺點:就是常駐內存,會增大內存的使用量,使用不當會形成內存泄露。
通常函數執行完畢,局部活動對象就會被銷燬,內存中僅僅保存全局做用域,可是閉包會長期駐紮在內存。javascript
在javascript中,若是一個對象再也不被引用,那麼這個對象就會被GC回收;(Garbage Collection),計算機科學中一種自動釋放再也不被使用的內存空間的機制。
若是兩個對象互相引用,而再也不被第3者所引用,那麼這兩個互相引用的對象也會被回收。java
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。 我只是想經過這兩個例子來講明閉包的用處和好處。
function testCount(){ var count=0; return function(){ count++; console.log(count); } } var plus = testCount(); //函數賦值給變量 plus(); //plus函數調用一次,結果爲1,至關於testCount()(); plus(); //plus調用第二次,結果爲2,實現了局部變量累加了。 //閉包會使變量始終保存在內存中,若是使用不當會增大內存消耗。