“闭合”究竟是什么意思?(该问题涉及IT技术)

28

结合闭包的讨论中,我经常看到某物关闭另一物之上,作为解释闭包的手段。

现在我并不难理解闭包,但“关闭”似乎是一个更基本的概念。否则,人们就不会用它来解释闭包了,不是吗?

关闭的确切定义是什么?某物另一物是什么?这个术语从哪里来?


1
通常意味着“向集合添加元素,然后再添加一些”。更多部分应确保集合的属性保持有效 - 在这种情况下,它是从中获取值的环境 - 您将需要为其添加的所有内容和使用lambda内部的所有内容添加到其中 - 这就是闭包。 - Random Dev
1个回答

36

考虑:

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. 名称为closure的函数的变量x被称为上值。

就是这样。


10
(1) 简而言之,“A闭合于B” == “B是A的自由变量”,其中自由变量指出现在函数主体中但不在其签名中的变量。 (2) 这个答案并没有解释需要可视化什么以及为什么选择“闭合于”(和“闭包”)这个术语。是由于语义(某物关闭了吗?还是某物变得更接近了?),还是选择这个词来使讨论听起来更深刻和神秘? - Evgeni Sergeev
4
请随意写下您自己的答案。 - Aadit M Shah
这就是我所需要的(谢谢!):“closes over”指“封闭”。 - Johan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接