JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
来源:互联网 发布:吕宋岛 台风 知乎 编辑:程序博客网 时间:2024/05/29 17:41
JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
示例代码前提:HTML代码默认如下
<body> <button>0</button> <button>1</button> <button>2</button> <button>3</button> <button>4</button> <button>5</button></body>
在日常编写JS代码时,我们经常会遇到类似于下面这种情况:
想让每个按钮被点击时,引用被点击的那个按钮的索引,类似于如下情况
<script type="text/javascript"> var btns = document.getElementsByTagName('button'); for(var i=0;i<btns.length;i++){ btns[i].onclick = function(){ alert(i); //结果每次弹出框中的i值都为6 };</script>
出现上述情况是因为JS中没有块级作用域,for循环中的循环变量 i 是在全局作用域中,点击函数中指向的又是同一变量 i ,而这个 i 在最后一次循环后值被改变为6。
最近无意中发现几种比较常用的解决方法:
方法一:在for循环外部创建独立的函数作用域,将循环变量值传过去:
for (var i = 0; i < 3; i++) { bindEvent(i); //每循环一次就传一次i }; function bindEvent(n) { btns[n].onclick = function () { alert(n); };
方法二:在点击函数前存储循环变量 i 的值:
for(var i=0;i<btns.length;i++){ btns[i].index = i; btns[i].onclick = function(){ alert(this.index); }; }
方法三:用闭包方法解决(私有作用域):
for(var i=0;i<btns.length;i++){ (function(j){ btns[j].onclick = function(){ alert(j); }; })(i); }
方法四:用ECMA新增let关键词代替var :
let关键字,将变量绑定在声明它的作用域中(即块级作用域)。
for(let i=0;i<btns.length;i++){ btns[i].onclick = function(){ alert(i); }; }
阅读全文
0 0
- JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
- swift中解决循环引用的方法
- 关于For循环中定义的变量在循环外的引用
- 关于For循环中定义的变量在循环外的引用
- 小心JavaScript中For循环的迭代变量
- 【Java】消除fastjson对同一对象循环引用的问题
- javascript解决for循环中i取值的问题
- JavaScript中for循环和for in 循环的区别
- JavaScript的闭包问题(闭包解决引用循环变量的问题)
- iOS Block 中 循环引用的解决
- JS中for循环输出同一变量值的问题
- sass for循环中变量的计算
- for循环中控制循环变量的总结 By ACReaper
- python的for循环中不能修改循环变量i
- block:解决成员变量的循环引用的问题
- block:解决成员变量的循环引用的问题
- JavaScript中for..in循环的陷阱
- 问题(已解决):push pop for循环中push变量,变量随之改变的问题
- Spring之多线程
- Pangolin多视口显示——按钮面板,图片,三维点云
- sklearn API 文档
- Activiti 5.16 版本
- GDI+
- JavaScript中几种常用的解决for循环中引用同一循环变量对象的方法
- 微信文件分享的那些坑
- 目标分割——基于目标轮廓
- Croc Champ 2012
- Noip 2015 senior ,The semi-finals,analysis (复赛题解)
- IMX6UL ARM 工控机
- 2017学习知识+学习计划
- JS如何去除指定字符串
- 387. First Unique Character in a String