进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 网站开发 -> JavaScript -> 文章内容  
在Javascript中,什么是闭包(Closure)

闭包的两个特点:www.goodsgy.com

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

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

例1。 www.goodsgy.com

<scripttype="text/javascript"> www.goodsgy.com

functionsayHello2(name){ www.goodsgy.com

vartext='Hello'+name;//localvariable www.goodsgy.com

varsayAlert=function(){alert(text);} www.goodsgy.com

returnsayAlert; www.goodsgy.com

} www.goodsgy.com

varsy=sayHello2('never-online'); www.goodsgy.com

sy(); www.goodsgy.com

</script>www.goodsgy.com

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

上面的代码为什么是一个闭包?www.goodsgy.com

因为sayHello2函数里有一个内嵌匿名函数www.goodsgy.com

sayAlert = function(){ alert(text); }www.goodsgy.com

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

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

<scripttype="text/javascript"> www.goodsgy.com

functionsayHello2(name){ www.goodsgy.com

vartext='Hello'+name;//localvariable www.goodsgy.com

varsayAlert=function(){alert(text);} www.goodsgy.com

returnsayAlert; www.goodsgy.com

} www.goodsgy.com

varsy=sayHello2('never-online'); www.goodsgy.com

alert(sy.toString()); www.goodsgy.com

</script>www.goodsgy.com

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

例2。 www.goodsgy.com

<scripttype="text/javascript"> www.goodsgy.com

functionsay667(){ www.goodsgy.com

//Localvariablethatendsupwithinclosure www.goodsgy.com

varnum=666; www.goodsgy.com

varsayAlert=function(){alert(num);} www.goodsgy.com

num++; www.goodsgy.com

returnsayAlert; www.goodsgy.com

} www.goodsgy.com

varsy=say667(); www.goodsgy.com

sy(); www.goodsgy.com

alert(sy.toString()); www.goodsgy.com

</script>www.goodsgy.com

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

[1] [2] [3]  下一页

在百度中搜索:在Javascript中,什么是闭包(Closure)
在Google中搜索:在Javascript中,什么是闭包(Closure)
在Yahoo中搜索:在Javascript中,什么是闭包(Closure)

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 在Java中利用JCOM实现仿Excel编程详解
· 在JS中使用RecordSet对象的GetRows方法
· 在JavaScript中实现命名空间
· [组图] Maya UV和UV编辑实例系列(4):使用F..
· [图文] Maya UV和UV编辑实例系列(17):Text..
· 在JDK 6.0中基于StAX分析XML数据
· [组图] 在Java中用类装载框架控制类加载
· [图文] 浅谈Excel报表在Java程序中的应用
· 在java中找到需要的资源文件路径
· 在Java中动态执行类的静态方法
 
· 用JS解决网站防挂iframe木马的方案
· 技巧 JavaScript常用判断函数
· IE浏览器中一个值得关注的JS问题
· 简易实现DIV圆角的JavaScript代码
· Javascript调用XML制作连动下拉框
· Javascript实现页内查找关键词实例
· JavaScript的系统函数学习
· JavaScript仿Windows关机效果
· javascript弹出窗口问题总结
· 在JS中使用RecordSet对象的GetRows方法

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)