数学
数学中,对一个集合的成员进行某种运算,生成的结果仍然是这个集合中的成员,则该集合被称为在某个运算下闭合。例如,实数在减法下闭合,但自然数不行:自然数3和7的减法3-7的结果不是自然数。
类似的,一个集体被称为在某些运算的搜集下闭合,如果它在每个运算(前面提及的某些运算中的每个)下独立闭合。
闭包性质:一个集合在某个运算或某些运算的搜集下闭合,则称为满足闭包性质。
计算机科学
闭包是词法闭包(LexicalClosure)的简称,是引用了自由变量的函数。这个引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。因此有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
在一些语言中,在函数中定义另一个函数时,如果内部的函数引用了外部函数的变量(自由变量),则可能产生闭包。运行时,一旦外部的函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。其中所引用的变量称为上值(upvalue)。
闭包经常和匿名函数混淆,但它们是两个不同的概念。
特征
1. 闭包包含环境成分和控制成分,一般来说,控制成分包含内部函数(一般是匿名函数),环境成分包含了内部函数所引用的自由变量。
2. 内部函数引用了外部函数的变量。
3. 函数可以被当作参数传递,也可以作为返回值返回。就像字符串、整数等简单类型。
4. 在没有闭包的语言中,变量的生命周期只限于创建它的环境。但在有闭包的语言中,只要有一个闭包引用了这个变量,它就会一直存在。
用途
1. 闭包只有在被调用时才执行使用,因此可以被用来定义控制结构。
2. 多个函数可以使用一个相同的环境,使得它们可以通过改变那个环境相互交流。