作家
登录

javascript 常见的闭包问题的解决办法

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

0 1 2 3 4 5 6 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]上段代码本意是在每个div上都加一个事件,即每当点击div时,就显示此div的相应序号。但是运行程序时我们会发现,不论点击那个,只会显示7,这是什么愿因呢。--这就是闭包的问题 原来 在js中,函数中在定义函数,就出现闭包了。此时外层函数中变量是可以在里层函数里利用的,即使外层函数结束。但是当外层中出现循环的时候,如果在里层函数中利用这个循环变量的话,会直接引用这个变量的最终值。 就像上述代码演示的一样。 如何解决呢。 可以利用匿名函数来加以解决。匿名函数会制动执行,我们可以利用这一特性,来产生一个作用域,生命一个变量,来引用外层的循环变量。 如代码所示: 0 1 2 3 4 5 6 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]由于在内层函数里只要出现循环变量的话 都是最终值,所以我们利用匿名函数 激发出一个作用域,在进入内层循环之前,有另一变量获得该循环变量的值,这一思想是处理闭包问题的精髓。 如下例子:此时并没有明显的for循环,但是 根据上述思想,可以立即加以解决 问题 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]解决后代码: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]补充:看到有网友这样解决了问题: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.

  推荐阅读

  jQuery 加上最后自己的验证

复制代码 代码如下: $.validator.setDefaults({ submitHandler: function() { if ($("#username").val() != "" && $("#password").val() != "") { form1.submit(); } else { if ($("#password").val() == "") { $(>>>详细阅读


本文标题:javascript 常见的闭包问题的解决办法

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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