如何優雅的解釋什麼是閉包

2021-06-22 16:41:06 字數 664 閱讀 7946

閉包,在維基百科上的定義是

在電腦科學中,閉包(closure)是詞法閉包(lexical closure)的簡稱,是引用了自由變數的函式。這個被引用的自由變數將和這個函式一同存在,即使已經離開了創造它的環境也不例外。
而函式到底是怎樣引用自由變數的呢?創造變數的環境又是什麼呢?

首先看一段python**

def fun():

n =

def res(x):

return n

return res

f = fun()

print f(2)

print f(3)

輸出的結果為

[2]

[2, 3]

列表n的作用域顯然在函式fun中,然而fun執行完畢後,n並沒有被**,而是繼續存活著。

也就是說,這個從屬於外部作用域的區域性變數n,被函式「封閉」起來了。

被封閉起來的變數的壽命,與封閉它的函式壽命相等,稱為閉包(closure)。

只有當封閉它的函式被**時,變數的才會被**。

閉包意味著資料與函式結合起來了,這和物件導向思想中的「物件」的概念很接近。

因此閉包實現的功能也可以由物件來實現。

什麼是閉包?直譯器?

外部函式包含內部函式 外部函式具有返回值 返回值是 內部函式名 內部函式引用了外部函式的區域性變數 deffunc def inerfunc pass return inerfunc 裝飾器 函式a是作為引數出現的,函式b接收函式a作為引數 要有閉包的特點 defdecorate func a 10...

什麼是閉包?從底層解釋閉包的執行

之前看過廖雪峰老師的閉包講解,當時不明白其中的執行原理,今天在看了渡一的js課程後,明白了閉包的原理。那就舉兩個例子來解釋下。go物件 global object 全域性環境下建立的執行期上下文,就是全域性作用域。ao物件 activation object 也叫執行期上下文。在函式被執行前一刻建立...

什麼是閉包

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