總結一下閉包。javascript
閉包的定義:當一個內部函數被其外部函數以外的變量所引用時,就造成了一個閉包。java
一個最簡單的閉包:閉包
function A(){ var count=0; return function(){ count++; console.log(count); }; } var B=A(); B(); //1 B(); //2 B(); //3
important!=>javascript的GC機制:函數
在javascript中,若是一個對象再也不被引用,那麼這個對象就會被GC回收,不然這個對象一直會保存在內存中。spa
因此咱們就能夠理解爲何在上述代碼中,A函數明明已經被返回退出執行了,變量count卻沒有被回收(count一直在原來的基礎上增長1,而不是每一次都從新從0開始再增長1),由於匿名函數(閉包)被返回賦予變量B,即被變量B所引用(在javascript中對象的賦值是引用傳遞),故這個匿名函數不會GC回收,同時變量count被匿名函數所引用,因此變量count亦不會被回收,所以變量count纔會一直會保存於內存中。code
閉包的特性對象