javascript 常见的闭包问题的解决办法_javascript技巧
程序员文章站
2024-01-13 08:04:46
...
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
上段代码本意是在每个div上都加一个事件,即每当点击div时,就显示此div的相应序号。但是运行程序时我们会发现,不论点击那个,只会显示7,这是什么愿因呢。--这就是闭包的问题
原来 在js中,函数中在定义函数,就出现闭包了。此时外层函数中变量是可以在里层函数里利用的,即使外层函数结束。但是当外层中出现循环的时候,如果在里层函数中利用这个循环变量的话,会直接引用这个变量的最终值。
就像上述代码演示的一样。
如何解决呢。
可以利用匿名函数来加以解决。匿名函数会制动执行,我们可以利用这一特性,来产生一个作用域,生命一个变量,来引用外层的循环变量。
如代码所示:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
由于在内层函数里只要出现循环变量的话 都是最终值,所以我们利用匿名函数 激发出一个作用域,在进入内层循环之前,有另一变量获得该循环变量的值,这一思想是处理闭包问题的精髓。
如下例子:此时并没有明显的for循环,但是 根据上述思想,可以立即加以解决 问题
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
解决后代码:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
补充:看到有网友这样解决了问题:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.
下一篇: 怎么用curl获取超长url?
推荐阅读
-
javascript 常见的闭包问题的解决办法_javascript技巧
-
上传文件返回的json数据会被提示下载问题解决方案_javascript技巧
-
一个对于js this关键字的问题_javascript技巧
-
HTML、CSS、JavaScript常见面试问题的总结(HTML篇)
-
javascript Array.sort() 跨浏览器下需要考虑的问题_javascript技巧
-
js中用window.open()打开多个窗口的name问题_javascript技巧
-
ie8 不支持new Date(2012-11-10)问题的解决方法_javascript技巧
-
window.onload 加载完毕的问题及解决方案(上)_javascript技巧
-
理解javascript中的闭包
-
Javascript-Mozilla和IE中的一个函数直接量的问题分析_javascript技巧