为了账号安全,请及时绑定邮箱和手机立即绑定

js中的for循环的值,在函数体里调用的问题,谁帮解释下其原因?

js中的for循环的值,在函数体里调用的问题,谁帮解释下其原因?

会飞的铁蛋 2017-09-10 10:27:16
<input type="button" id="btn" value="按钮1" /> <input type="button" id="btn" value="按钮2" /> <input type="button" id="btn" value="按钮3" /> <input type="button" id="btn" value="按钮4" /> <script> var btn=document.getElementsByTagName('input'); for(var i=0;i<btn.length;i++){    btn[i].onclick=function(){ alert(i);//输出4 4 4 4 }   }是什么原因造成for循环体输出都是循环后的值
查看完整描述

2 回答

已采纳
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

//ES5 的写法
for(var i=0;i<btn.length;i++){
    (function(i){
        btn[i].onclick=function(){
            alert(i);
         }
    })(i);
}


//ES6中可以不这么做,使用let / const 也可以达到块作用域的目的
//ES6的写法
for(let i=0;i<btn.length;i++){
    btn[i].onclick=function(){
      alert(i);
   }
}


查看完整回答
1 反对 回复 2017-09-10
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

i在每次循环迭代的时候改变了值,当你点击的时候alert的i就是最后一次迭代的值。

你可以用闭包来保存i的值


查看完整回答
反对 回复 2017-09-10
  • 2 回答
  • 0 关注
  • 1973 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信