WEB开发网
开发学院网页设计JavaScript 在Javascript中,什么是闭包(Closure) 阅读

在Javascript中,什么是闭包(Closure)

 2010-09-14 13:30:07 来源:WEB开发网   
核心提示: 例2, <scripttype="text/javascript">functionsay667(){//Localvariablethatendsupwithinclosurevarnum=666;varsayAlert=function(){alert(

例2。

<scripttype="text/javascript">
functionsay667(){
//Localvariablethatendsupwithinclosure
varnum=666;
varsayAlert=function(){alert(num);}
num++;
returnsayAlert;
}
varsy=say667();
sy();
alert(sy.toString());
</script>

上面的代码中,匿名变量function() { alert(num); }中的num,并不是被拷贝,而是继续引用外函数定义的局部变量——num中的值,直到外函数say667()返回。

例3。

<scripttype="text/javascript">
functionsetupSomeGlobals(){
//Localvariablethatendsupwithinclosure
varnum=666;
//Storesomereferencestofunctionsasglobalvariables
gAlertNumber=function(){alert(num);}
gIncreaseNumber=function(){num++;}
gSetNumber=function(x){num=x;}
}
</script>
<buttononclick="setupSomeGlobals()">生成-setupSomeGlobals()</button>
<buttononclick="gAlertNumber()">输出值-gAlertNumber()</button>
<buttononclick="gIncreaseNumber()">增加-gIncreaseNumber()</button>
<buttononclick="gSetNumber(5)">赋值5-gSetNumber(5)</button>

上例中,gAlertNumber, gIncreaseNumber, gSetNumber都是同一个闭包的引用,setupSomeGlobals(),因为他们声明都是通过同一个全局调用——setupSomeGlobals()。

你可以通过“生成”,“增加”,“赋值”,“输出值”这三个按扭来查看输出结果。如果你点击“生成”按钮,将创建一个新闭包。也就会重写gAlertNumber(), gIncreaseNumber(), gSetNumber(5)这三个函数。

Tags:Javascript 什么 闭包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接