闭包,存在于广泛的函数式编程语言的概念中,很多高级语言例如Smalltalk、JavaScript、Ruby还有Python对闭包都有或多或少的支持。因此在.NET平台中,对闭包的支持也不能例外。
闭包从本质上来说,它来源于数据概念概念,是指由函数以及与函数相关的上下文环境组合而成的实体。通过闭包,函数与其上下文变量(或称为自由变量,表示局部变量之外的变量)之间建立起关联关系,上下文变量的状态也可以在函数的多次调用过程中持久保持。从作用域的角度而言,闭包有利于信息的隐蔽,私有变量只有在该函数内可见。
在JavaScript语言中,闭包无处不在。在官方概念中,一个拥有变量和绑定了该变量的表达式,就形成闭包。简单地说,在JavaScript中函数内部的子函数将自然形成一个闭包:
<script language="javascript"type="text/javascript">
function f(){
x="Hello,Closure.";
function fx(){
alert(x);
}
return fx;
}
var r =f();
r();
</script>
闭包体现在JavaScript中,带来的好处同样是对变量的封装和隐蔽,同时将变量的值保存在内存中。同样的情况,也可以发生在.NET。