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

 更新时间:2011年01月17日 22:37:15   作者:  
什么是闭包呢?闭包就是函数实例执行过程中动态产生一个没有被释放资源的栈区,也是一个预执行的过程。
何谓没有被释放资源的栈区和预执行的过程,用一个最常见的示例来解释:
比方现在我们有一个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
原创文章,请尊重打字的辛劳和作者的权益,转载时请不要删除这里的作者信息。

相关文章

  • JS 在数组插入字符的实现代码(可参考JavaScript splice() 方法)

    JS 在数组插入字符的实现代码(可参考JavaScript splice() 方法)

    在数组插入字符,添加数组,删除数组可以用slice自带的方法。操作比较方便,这个代码是作者通过push与shift方法实现,只能是个思路,但不推荐这样的方法。
    2009-12-12
  • Webpack实战加载SVG的方法

    Webpack实战加载SVG的方法

    本篇文章主要介绍了Webpack实战加载SVG的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • js中一个函数获取另一个函数返回值问题探讨

    js中一个函数获取另一个函数返回值问题探讨

    在本文将为大家详细探讨下js中一个函数获取另一个函数返回值问题,比较模糊的朋友可以学习下哦
    2013-11-11
  • 浅析上传头像示例及其注意事项

    浅析上传头像示例及其注意事项

    本文主要分享一个简易的上传头像示例以及其大致流程、实现过程中需要注意的事项。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • javascript实现数字时钟效果

    javascript实现数字时钟效果

    这篇文章主要为大家详细介绍了javascript实现数字时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • 一分钟学会JavaScript中的try-catch

    一分钟学会JavaScript中的try-catch

    这篇文章主要给大家介绍了关于如何通过一分钟学会JavaScript中try-catch的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • JavaScript String 对象常用方法总结

    JavaScript String 对象常用方法总结

    下面小编就为大家带来一篇JavaScript String 对象常用方法总结。小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-04-04
  • Javascript实现计算个人所得税

    Javascript实现计算个人所得税

    用javascript脚本语言编写一个“个人所得税计算器”?计算公式:所得税=(月收入-起征额)*10%;重填就是全部清空;十分的实用,有需要的小伙伴可以参考下。
    2015-05-05
  • uniapp页面回到顶部两种实现方法

    uniapp页面回到顶部两种实现方法

    这篇文章主要给大家介绍了关于uniapp页面回到顶部两种实现方法的相关资料,在uniapp中要实现回到顶部的效果有两种方法实现,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-08-08
  • js原生之焦点图转换加定时器实例

    js原生之焦点图转换加定时器实例

    本文主要分享了在jQuery之焦点图转换-左右的基础上,将jQuery代码改成js原生,并添加定时器(setInterval()和clearInterval())的实例代码。需要的朋友可以参考借鉴
    2016-12-12

最新评论