2014-11-23 136 views
6

結合閉包我經常讀東西關閉以外別的東西作爲解釋閉包的方法。「結束」是什麼意思?

現在我對理解閉包沒有太大困難,但「閉幕」似乎是一個更基本的概念。否則,人們不會提及它來解釋閉包,是不是?

什麼是關閉了確切定義,什麼是東西別的?這個詞來自哪裏?

+1

它通常意味着「添加添加元素到一個集合,然後*更多*」 - *更多*部分應該確保集合的屬性保持有效 - 在這種情況下,它是您獲得您的值的環境從 - 你添加那些,你可能需要的所有東西,你在lambda中使用它 - 這是關閉 – Carsten 2015-05-02 11:56:00

回答

8

考慮:

something closes over something else 
|_______| |_________| |____________| 
    |   |    | 
subject  verb  object 

這裏:

  1. 主體是關閉。閉包是一個功能。
  2. 關閉「關閉」(包含在內)其自由變量的集合。
  3. 該對象是閉包的自由變量的集合。

考慮一個簡單的函數:

function add(x) { 
    return function closure(y) { 
     return x + y; 
    }; 
} 

這裏:

  1. 命名add的功能只有一個變量,變量名爲x,因爲它是內部的定義是不自由變量範圍爲add本身。
  2. 命名closure該函數有兩個變量,命名爲xy,外面x是因爲它是在add(未closure)和y範圍限定的自由變量不是自由變量,因爲它是在所定義的範圍closure本身。

因此,在第二種情況下命名closure的功能是「接近過」命名x可變說。

因此:

  1. 命名closure功能被認爲是命名x可變的封閉。
  2. 名爲x的變量被稱爲是名爲closure的函數的最高值。

這就是它的全部。

+2

(1)所有這些可以用幾句話來說:*「A關閉B」==「 B是A的自由變量「,其中自由變量是出現在函數體內,但不出現在其簽名中的那些變量*(2)答案不直觀地表示可視化的內容以及爲什麼術語」關閉「(和「封閉」)被選中。這是由於語義(做了些什麼?或者變得更加接近?),還是被選擇來使討論聽起來更加深刻和神祕? – 2016-05-02 04:04:48

+0

隨意寫你自己的答案。 – 2016-05-02 04:14:21