结合闭包的讨论中,我经常看到某物关闭在另一物之上,作为解释闭包的手段。
现在我并不难理解闭包,但“关闭”似乎是一个更基本的概念。否则,人们就不会用它来解释闭包了,不是吗?
关闭的确切定义是什么?某物和另一物是什么?这个术语从哪里来?
结合闭包的讨论中,我经常看到某物关闭在另一物之上,作为解释闭包的手段。
现在我并不难理解闭包,但“关闭”似乎是一个更基本的概念。否则,人们就不会用它来解释闭包了,不是吗?
关闭的确切定义是什么?某物和另一物是什么?这个术语从哪里来?
考虑:
something closes over something else
|_______| |_________| |____________|
| | |
subject verb object
这里:
考虑一个简单的函数:
function add(x) {
return function closure(y) {
return x + y;
};
}
在这里:
add
的函数只有一个变量,名为x
,它不是自由变量,因为它是在add
本身的作用域内定义的。closure
的函数有两个变量,名为x
和y
,其中x
是自由变量,因为它是在add
(而不是closure
)的作用域内定义的,而y
不是自由变量,因为它是在closure
本身的作用域内定义的。因此,在第二种情况下,名称为closure
的函数被称为“封闭”变量名称为x
。
因此:
closure
的函数被称为变量x
的闭包。closure
的函数的变量x
被称为上值。就是这样。