1. 程式人生 > >閉包原理解析及其應用場景

閉包原理解析及其應用場景

閉包是一個詞法作用域和函式的組合概念。所以要理解閉包,必須先理解作用域和函式的概念。

函式概念無需贅述,作用域的外表是一對大括號,其本質是一個按照一組規則對記憶體中的變數進行查詢的工具,也有人把它直接理解為一套規則。規則大致是,當程式需要某個變數時,會先在當前作用域查詢,如果找不到會繼續在外層作用域查詢,逐級往上,直到找到該變數,或者查詢完全域性作用域。

下面的程式碼清晰地展示了閉包:

function foo() {
          var a = 2;
          function bar() {
            console.log( a );
          }
          
return bar; } var baz = foo(); baz(); // 2

一般情況下,foo()執行後,其所在的整個作用域會被垃圾回收器釋放。但是,由於bar() 依然持有對該作用域的引用,這個作用域包括其附屬的變數都不會被回收,這個引用就叫作閉包。

當函式可以記住並訪問所在的詞法作用域,即使函式是在當前詞法作用域之外執行,這時就產生了閉包。