雖然閉包是 JavaScript 中的基本概念,但新手可能會發現它們模糊且難以掌握。具體來說,如果沒有任何實際經驗,ECMA 標準的定義可能很難理解。因此,我們不會在這篇文章中花很多篇幅來解釋閉包的概念,而是透過使用實際程式碼讓您輕鬆理解。
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
這是最簡單的閉包。
現在我們已經了解了基礎知識,讓我們簡要地研究一下它與典型函數的差異。以下是上述程式碼翻譯成自然語言後的樣子:
一條語句可以封裝這五個運算:
函數A內部的函數B和變數名稱被函數A外部的變數C引用。
經過一點修改,語句定義了一個閉包,如下:
當內部函數被外部函數外部的變數引用時,就形成了閉包。
因此,執行以上五個操作就定義了一個閉包。
在了解閉包的用途之前,我們先來了解 JavaScript 的 GC(垃圾收集)機制。
在 JavaScript 中,當一個物件不再被引用時,它會被 GC 回收,否則,它會繼續保留在記憶體中。
在上面的例子中,B 依賴 A,因為 B 是在 A 內部定義的,而 A 被 C 間接引用,因為外部變數 C 引用了 B。
即A不會被GC回收,會繼續保存在記憶體中。為了證明這個推理,我們稍微改進一下上面的例子。
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
為什麼計數沒有重置?
關閉機制:
因此,如果您在模組中定義了一些變量,並且希望將這些變量保留在內存中但又不想“污染”全局變量,則可以使用閉包來定義該模組。
以上是[JavaScript] 在幾秒鐘內理解閉包的詳細內容。更多資訊請關注PHP中文網其他相關文章!