"收盘"究竟是什么意思?

Mar*_*urg 14 closures functional-programming terminology

与闭包相结合,我经常读到某些 东西因其他东西而关闭,作为解释闭包的手段.

现在我理解闭包没有太大困难,但"收尾"似乎是一个更基本的概念.否则一个人不会用它来解释闭包,会不会?

结算的确切定义是什么,什么是东西其他东西?该术语来自何处?

Aad*_*hah 16

考虑:

something closes over something else
|_______| |_________| |____________|
    |          |             |
 subject      verb        object
Run Code Online (Sandbox Code Playgroud)

这里:

  1. 主题是关闭.闭包是一种功能.
  2. 闭包"关闭"(如附上)其自由变量集.
  3. 对象是闭包的自由变量集.

考虑一个简单的功能:

function add(x) {
    return function closure(y) {
        return x + y;
    };
}
Run Code Online (Sandbox Code Playgroud)

这里:

  1. 名为的函数add只有一个名为的变量,x它不是自由变量,因为它是在add自身范围内定义的.
  2. 命名函数closure有两个变量,名为xand y,其中x一个是自由变量,因为它在add(not closure)范围内定义,而y不是自由变量,因为它是在closure自身范围内定义的.

因此,在第二种情况下,名为的函数closure被称为"关闭"名为的变量x.

因此:

  1. 名为的函数被称为名为closure变量的闭包x.
  2. 名为的变量被称为名为x的函数的upvalue closure.

这里的所有都是它的.

  • (1)所有这些可以用几句话来说:*"A关闭B"=="B是A的自由变量",其中自由变量是出现在函数体内但不在其签名中的变量.*(2)答案没有给出什么可视化的直觉以及选择"闭合"(和"闭合")一词的原因.是由于语义(做了什么接近?或者是某些事情变得更接近?)还是选择了使讨论听起来更加深刻和神秘的词? (6认同)
  • 随意写下你自己的答案。 (2认同)