JS中解决for循环中引用同一循环变量对象的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>第四章</title>
</head>
<body>
    <button>1</button>
    <button>2</button>
    <button>3</button>
    <script>
            var btns = document.getElementsByTagName('button');
            for(var i = 0;i<3;i++){
                btns[i].onclick=function(){
                    alert(i+1);//输出值永远是4
                }
            }
    </script>
</body>
</html>

方法一:在点击函数前存储循环变量 i 的值

for(var i=0;i<btns.length;i++){
btns[i].index = i;
btns[i].onclick = function(){
alert(this.index+1);
};
}

方法二:用ECMA新增let关键词代替var

let关键字,将变量绑定在声明它的作用域中(即块级作用域)。
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);
};
}

方法四:在for循环外部创建独立的函数作用域,将循环变量值传过去

for (var i = 0; i < 3; i++) {
bindEvent(i); //每循环一次就传一次i
};
function bindEvent(n) {
btns[n].onclick = function () {
alert(n);
};
原文:https://blog.csdn.net/weixin_38636706/article/details/74995535

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,169评论 0 2
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 5,617评论 0 6
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,123评论 1 45
  • 学习完整课程请移步 互联网 Java 全栈工程师 【领域驱动设计】浅谈聚合的划分与设计 聚合以及聚合根是领域驱动设...
    撸帝阅读 8,828评论 0 2