什麼是「閉包」(closure)為什麼要用它?

2022-07-03 10:30:15 字數 1966 閱讀 3660

什麼是閉包:

閉包是指有權訪問另乙個函式作用域中變數的函式,建立閉包的最常見的方式就是在乙個函式內建立另乙個函式,通過另乙個函式訪問這個函式的區域性變數,利用閉包可以突破作用鏈域,將函式內部的變數和方法傳遞到外部

閉包的特性:

1.函式內再巢狀函式

2.內部函式可以引用外層的引數和變數

3.引數和變數不會被垃圾**機制**

閉包的用途:

1、讀取函式內部的變數

2、讓這些變數的值始終保持在記憶體中。不會再f1呼叫後被自動清除。

3、方便呼叫上下文的區域性變數。利於**封裝。 原因:f1是f2的父函式,f2被賦給了乙個全域性變數,f2始終存在記憶體中,f2的存在依賴f1,因此f1也始終存在記憶體中,不會在呼叫結束後,被垃圾**機制**。

閉包的缺點:

1、由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在ie中可能導致記憶體洩露。解決方法是,在退出函式之前,將不使用的區域性變數全部刪除。

2、閉包會在父函式外部,改變父函式內部變數的值。所以,如果你把父函式當作物件(object)使用,把閉包當作它的公用方法(public method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函式內部變數的值。

例如://li 節點的onclick事件都能正確的彈出當前被點選的li索引

)//如果不使用閉包的話,值每次都是4

})(i);

}script

>

閉包應用場景 閉包應用場景之settimeout:

什麼是閉包?為什麼使用閉包?閉包的缺點?

閉包 即重用乙個變數,又保護變數不被汙染的一種機制。為什麼使用閉包 全域性變數和區域性變數都具有不可兼得的優缺點。全域性變數 優 可重用,缺 易被汙染。區域性變數 優 僅函式內可用,不會被汙染。缺 不可重用 何時使用 只要即重用乙個變數,又保護變數不被汙染時。如何 3步 1.用外層函式包裹要保護的變...

什麼是閉包

什麼是閉包 閉包說的通俗一點就是打通了一條在函式內部訪問函式內部作用域的通道。正常情況下,函式外部是訪問不了內部作用域變數的,表象判斷是不是閉包 函式巢狀函式,內部函式被return 內部函式呼叫外層函式的區域性變數。優點 可以隔離作用域,不造成全域性渲染。缺點 由於閉包長期駐留記憶體,則長期這樣會...

什麼是閉包

理解閉包需要先了解 作用域 作用域是指當前執行 對變數的訪問許可權 分為靜態作用域和動態作用域,js採用靜態作用域 其區別是 靜態作用域 函式作用域是在函式定義時決定,動態作用域 函式作用域是在函式呼叫時定義 es6的塊級作用域 通過let 和 const 宣告,只能在宣告變數所在的作用域裡使用,外...