首页 > 代码库 > javascript闭包
javascript闭包
关于闭包的介绍,推荐两篇文章:
廖雪峰javascript教程-闭包:
http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143449934543461c9d5dfeeb848f5b72bd012e1113d15000
博客园园友:
http://www.cnblogs.com/onepixel/p/5062456.html
循环绑定事件,是个典型的闭包问题。
比如现在页面有四个头像,我点击切换
html代码如下:
<div id="imgList"> <img src="../images/001.jpg" class="on" /> <img src="../images/002.jpg" /> <img src="../images/003.jpg" /> <img src="../images/004.jpg" /> </div>
那么循环绑定事件,我们会大概会这么写:
for (var i = 0; i < images.length; i++) { images[i].onclick = function () { images[i].className="on"; } }
这么写的话,点击图片的时候,调用方法,i已经是4了,所以images[4].className就报错了。
根据闭包的知识,我们修改成如下写法:
var imageList = document.getElementById("imgList"); imageList.imageSelected = 0; var images = imageList.children; for (var i = 0; i < images.length; i++) { images[i].onclick = (function (num) { return function () { if (imageList.imageSelected == num) return; images[imageList.imageSelected].className = ‘‘; this.className = "on"; imageList.imageSelected = num; } })(i); }
里面用到了立即执行函数,这样的话每个i就能对应上了。
javascript闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。