作家
登录

浅析javascript闭包 实例分析

作者: 来源:www.28hudong.com 2013-03-30 01:05:29 阅读 我要评论

官方解释 “闭包”是一个拥有许多变量和绑定了这些变量的环境表达式(通常是一个函数),因而这些变量也是环境表达式的一部分。 通俗解释 Javascript中所有的函数都是一个闭包。不过一般来说,嵌套的function产生的闭包更为强大,也是大部分时候我们所说的“闭包”。看如下代码: 复制代码 代码如下: <script type="text/javascript"> <!-- //外层函数a function a(){ //临时变量i var i = 0; //内层函数b function b(){ //引用外层临时变量i alert(++i); } //执行结果,返回内层函数b return b; } //执行外层函数a,同时给c一个指向内层函数b的引用 //若按正常理解,此语句执行完后i将被GC回收,此时的i应为“undefine” var c = a(); //执行内层函数,由于闭包的缘故,函数b中i仍然引用的是外部的临时变量i c(); --> </script> 这段脚本在执行完var c=a()之后,变量c实际上就指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值。这段代码其实就是一个闭包,为什么?因为函数a外的变量c引用了函数a内部的函数b。 Javascript的垃圾回收机制 由于javascript特殊的垃圾回收机制,才导致了闭包的产生。Javascript垃圾回收机制的大体规则如下: 在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象相互引用,而不再被第3者引用,那么这两个互相引用的对象也会被回收。而在上述的脚本中,函数a被b引用,函数b又被函数a外的c所引用,这就是为什么函数a执行后不被回收的原因。 闭包的应用场景 1. 保护函数内的变量安全。以上面的例子为例,函数a中变量i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。 2. 在内存中维持一个变量。依然如上面的例子,由于闭包,函数a中的i一直存在于内存中,因此每次执行c(),i都会加1。 3. 通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)。如下,私有属性和私有方法在Constructor外是无法访问的: 复制代码 代码如下: function Constructor(…){ var that = this; var membername = value; function membername(…){…} }

  推荐阅读

  基于node.js的快速开发透明代理

但是最近服务器端js的火爆确实因为node.js项目。在velocity china 2010大会Douglas Crockford(Yahoo!)也有一个topic《卷土重来:服务器端JavaScript》提到node.js。关于node.js的详细资料请google. node.js>>>详细阅读


本文标题:浅析javascript闭包 实例分析

地址:http://www.17bianji.com/kaifa2/JS/25158.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)