作家
登录

简短几句 通俗解释javascript的闭包

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

何谓没有被释放资源的栈区和预执行的过程,用一个最常见的示例来解释: 比方现在我们有一个ul,下面有很多个li,需要遍历他们为他们绑定单击事件,并在点击后将当前下标传递给另外一个function来进行额外的处理: 复制代码 代码如下: for(var i=0; i<agroup.length; i++) {   agroup[i].onclick = function() {     handler(i);   } } 执行结果显而易见对吧?在handler中,获取传递过去的参数i,你看到的将全部是最大的下标,这个时候,我们通常用下面的办法解决: 复制代码 代码如下: for(var i=0; i<agroup.length; i++) {   agroup[i].i = i   agroup[i].onclick = function() {     handler(this.i);   } } 那么在这里,先讲一下this的指向问题,从通常来说,javascript中的this是指向当前引用他的对象的。上面我们相当为this新增了一个为i的属性,他的值就是当前的下标值。 那么用闭包的方式如何解决这个问题?其实原理相同,我们需要预先的把i值保存起来,或叫作传递: 复制代码 代码如下: for(var i=0; i<agroup.length; i++) {   agroup[i].onclick = function(index) {     return function() {       handler(index);     }   }(i); } 这个时候你会得到正确的下标,这样做与增加i属性有何雷同之处?也就是他们都预先把下标i值传递或是储存起来。在上面的演示中,预执行onclick所引用的函数,而这个 函数当中返回了一个内嵌函数,形成一个没有被释放资源的栈区,并在预执行的时候将i值以参数的形式传入这个作用域(解释能力有问题,这句解释不知道是否准确,欢迎砖拍)。 综上所述,闭包的作用通常是改变作用域或预执行。应该看官很明白了,上面个出的示例很局限,闭包的应用范围是很广的,了解其因果,才能灵活的使用它。 auntion 2011-11-15 mail Auntion@gmail.com QQ 82874972 原创文章,请尊重打字的辛劳和作者的权益,转载时请不要删除这里的作者信息。

  推荐阅读

  对xmlHttp对象的理解

1 xmlHttp是一套在JavaScript脚本语言中通过Http协议传送或者接收XML及其他数据的API。 (xmlHttp是一套API,通过Http协议进行数据的传送和接收。) 2 xmlHttp提供客户端同http服务器通讯的协议,客户端通过xmlHtt>>>详细阅读


本文标题:简短几句 通俗解释javascript的闭包

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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