JS中的閉包(Closure)

2021-08-08 00:25:40 字數 783 閱讀 9631

閉包是指有權訪問另乙個函式作用域中的變數的函式。

最常見的就是在乙個函式內部建立另外乙個函式。以trialfunction()函式為例:

function

trialfunction

(property) else

if (a1 > b1) else

};}

上述**中,內部函式訪問了外部函式中的變數property。即使這個內部函式被返回了,而且在其他地方被呼叫了,它人仍然可以訪問property變數。

這種情況是因為,這個內部函式的作用域鏈包含了trialfunction的作用域。

當某個函式被呼叫時,會建立乙個執行環境(execution context)及相應的作用域鏈。隨後,使用arguments和其他命名引數的值來初始化函式的活動物件(activity object)。但在作用域鏈中,外部函式的活動物件始終處於第二位,外部函式的外部函式的活動物件處於第三位,最後直至作為作用域鏈的全域性執行環境。

在函式執行過程中,為讀取和寫入變數的值,就需要在作用域鏈中查詢變數。

作用域鏈的這種機制導致了乙個***,那就是閉包只能取得包含函式中任何變數的最後乙個值。

例如:

function

example

() }

return result;

}

這個函式會返回乙個陣列,一般大家會認為,每個函式都應該返回自己的index,即[0, 1, 2, ……9];但是實際上每個函式都返回的是10。

js閉包 closure ,個人理解

一 閉包概念理解 各種專業文獻上對js 閉包 closure 定義非常抽象,賊難看懂。我的理解是,閉包就是能夠讀取某函式內部變數的函式。由於在j ascript語言中只有在函式內部的函式才能讀取區域性變數,因此可以把閉包簡單理解成 定義在乙個函式內部的函式 所以,在本質上,閉包就是將函式內部和函式外...

Python 中的閉包 Closure

在一些語言中,在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組 私有 變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。維基百科 用比較容易懂的人話說,就是當某個函式被當成物件返回時,夾帶了外部變...

Python中的閉包 closure

簡單的說,就是某個內部函式被當做物件返回時,夾帶了這個內部函式之外的變數,這就形成了乙個閉包。def logging level def say words print is a outer variable format level print say is format words,level ...