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

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

 2010-09-14 13:30:07 来源:WEB开发网   
核心提示:闭包的两个特点:1、作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态,在Javascript中,什么是闭包(Closure),2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区,比如上例中的变量sy,就是引用内嵌函数中的匿名函数function(){ alert(text); },例1, <sc

闭包的两个特点:

1、作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态。

2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

例1。

<scripttype="text/javascript">
functionsayHello2(name){
vartext='Hello'+name;//localvariable
varsayAlert=function(){alert(text);}
returnsayAlert;
}
varsy=sayHello2('never-online');
sy();
</script>

作为一个Javascript程序员,应该明白上面的代码就是一个函数的引用。如果你还不明白或者不清楚的话,请先了解一些基本的知识,我这里不再叙述。

上面的代码为什么是一个闭包?

因为sayHello2函数里有一个内嵌匿名函数

sayAlert = function(){ alert(text); }

在Javascript里。如果你创建了一个内嵌函数(如上例),也就是创建了一个闭包。

在C或者其它的主流语言中,当一个函数返回后,所有的局部变量将不可访问,因为它们所在的栈已经被消毁。但在Javascript里,如果你声明了一个内嵌函数,局部变量将在函数返回后依然可访问。比如上例中的变量sy,就是引用内嵌函数中的匿名函数function(){ alert(text); },可以把上例改成这样:

<scripttype="text/javascript">
functionsayHello2(name){
vartext='Hello'+name;//localvariable
varsayAlert=function(){alert(text);}
returnsayAlert;
}
varsy=sayHello2('never-online');
alert(sy.toString());
</script>

这里也就与闭包的第二个特点相吻合。

1 2 3  下一页

Tags:Javascript 什么 闭包

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