我理解的閉包就是:乙個函式裡邊包含另外乙個函式,並且裡邊的函式可以讀取這個函式外邊函式裡邊的任何資訊。內層的函式可以使用外層函式的所有變數,即使這個外層函式已經執行完畢了。
閉包可以用在許多地方,它的最大用處有兩個:第乙個是前面提到的可以讀取函式內部的變數(區域性變數);第二個就是讓這些變數的值始終保持在記憶體中。
1、閉包的資料都是存放在記憶體中的,記憶體會消耗很大,所以不能濫用閉包,也有可能會導致記憶體洩露問題。解決方案就是在退出函式之前,將不適用的區域性變數刪除掉。
2、閉包會在父函式外部,改變父函式內部的值。所以我們要把父函式當做物件使用,把閉包當做它的共用方法,把內部變數當做它的私有屬性,一定不要隨便更改。
function
outerfun
() return innerfun; //注意這裡
}var obj=outerfun();
obj(); //結果為1
obj(); //結果為2
var obj2=outerfun();
obj2(); //結果為1
obj2(); //結果為2
如果我們沒有return innerfun;還有外邊的呼叫直接是innerfun();這樣是錯誤的,inner fun()這個函式是內部的,不可以在外部直接呼叫使用,只有當返回回來的時候才可以使用。
1、這裡寫鏈結內容
特別是這個文章中最後的乙個例子,閉包和匿名函式的完美結合,可以更好地理解匿名函式和閉包。
2、這篇文章感覺對閉包寫的很細膩,很認真的看完了。感謝作者。
3、
JS閉包問題
因為你需要在事件內使用事件外的迴圈變數i。你的迴圈中只是為元素繫結事件,這時事件並沒有觸發執行。等到事件觸發時,那個迴圈早已經結束了,那時的i的值已經是迴圈最大值加1了。所以需要用一些方式儲存住當前迴圈的i的值。方案1為 用閉包儲存住當前迴圈的i的值。for var i 0 i i 方案2為 用le...
js的閉包問題
首先我們需要了解閉包,了解閉包就要了解全域性變數和區域性變數。在之前的js相關部落格中,已經提到過全域性變數和區域性變數。全域性變數是在整個js的作用範圍,還要了解在定義全域性變數時,它前面的關鍵字是可以省略的。而區域性變數作用範圍只是在當前的作用域。我們在呼叫區域性變數時要使用到return語句,...
JS閉包中的this問題
首先看一段 var obj var c obj.get console.log c 那麼輸出c的值為多少呢?看下圖 這說明obj.get 只是返回乙個匿名函式,並沒有執行。所以轉到this,相應的 為 var name ss var obj var val obj.get console.log v...