2014-11-23 135 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