当前位置: 首页 > 图文教程 > 网络编程 > Javascript > javascript 常见的闭包问题的解决办法

Javascript
js返回当前网页的url
简明json介绍
JavaScript在IE中“意外地调用了方法或属性访问”
JS获得鼠标位置(兼容多浏览器ie,firefox)修正版
JavaScript 基础问答 四
支持多浏览器(IE、Firefox、Opera)剪切板复制函数
js 解决“options为空或不是对象”
走出JavaScript初学困境—js初学
JavaScript入门教程(6) Window窗口对象
JavaScript 快捷键设置实现代码
Extjs Ajax 乱码问题解决方案
JavaScript 实现模态对话框 源代码大全
[原创]js 日期加红代码 适用于各种cms
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
[原创]javascript 改变字体大小方法集合
javascript 单行文字向上跑马灯滚动显示
一个简单的javascript类定义例子
javascript 类定义的4种方法
javascript类继承机制的原理分析
firefox(火狐)和ie浏览器禁止右键和禁止复制的代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 349 ::
收藏到网摘: n/a

javascript 常见的闭包问题的解决办法,需要的朋友可以参考下。


[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

上段代码本意是在每个div上都加一个事件,即每当点击div时,就显示此div的相应序号。但是运行程序时我们会发现,不论点击那个,只会显示7,这是什么愿因呢。--这就是闭包的问题
原来 在js中,函数中在定义函数,就出现闭包了。此时外层函数中变量是可以在里层函数里利用的,即使外层函数结束。但是当外层中出现循环的时候,如果在里层函数中利用这个循环变量的话,会直接引用这个变量的最终值。
就像上述代码演示的一样。
如何解决呢。
可以利用匿名函数来加以解决。匿名函数会制动执行,我们可以利用这一特性,来产生一个作用域,生命一个变量,来引用外层的循环变量。
如代码所示:

[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

由于在内层函数里只要出现循环变量的话 都是最终值,所以我们利用匿名函数 激发出一个作用域,在进入内层循环之前,有另一变量获得该循环变量的值,这一思想是处理闭包问题的精髓。
如下例子:此时并没有明显的for循环,但是 根据上述思想,可以立即加以解决 问题

[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

解决后代码:

[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

补充:看到有网友这样解决了问题:

[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]

我个人的理解是 在进入内层循环之前 把id赋值给f,f在作为内层循环的参数,其思想应该是一样的.