javascript - For 循环意外增量值

标签 javascript

所以我明白为什么点击任何按钮都会弹出“按钮 [循环中 i 的最后一个值] 但为什么我 == 5 而不是 4?

function myFn() {
   var elems = document.getElementsByTagName('button');
   var len = elems.length;
   for (var i = 0; i < len; i++) {  
      elems[i].onclick = function() {           
          alert ("Button " + i); 
      };
   }
   alert ("Button " + i); 

}
myFn();

http://jsfiddle.net/ka_tee_jean/fCtC8/

最佳答案

在循环结束时,i 变量的最后一个值为 5。因此 myFn() 中的 alert 语句将在页面加载时显示“Button 5”。 for 循环内函数内的警报语句通过闭包作用域引用相同 变量。因此,点击按钮也会提醒“按钮 5”。

希望对您有所帮助!请参阅下面打印您想要的内容的功能。需要注意的是,通过复制 i 的值(JavaScript 中的按值传递机制)来引入另一个闭包作用域,以便 onclick 函数引用另一个变量 (i),它有一个值的副本

function myFn() {
   var elems = document.getElementsByTagName('button');
   var len = elems.length;
   for (var i = 0; i < len; i++) {  
       (function(i) {
           elems[i].onclick = function() {           
              alert ("Button " + i); 
          };
       })(i);
   }
   alert ("Button " + i); 

}

myFn();

关于javascript - For 循环意外增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24246826/

相关文章:

javascript - 使用异步过滤和映射 Promise

javascript - 使用字符串 + 字符串数组过滤对象数组

javascript - 启用 contentEditable 或 designMode 的拖放和粘贴检测

javascript - javascript或jquery中的自动标签切换

javascript - 我如何在 TypeScript 中定位 ES2018?

javascript - 使用 jQuery 获取标签内的文本

javascript - ECharts中自定义字段名称

javascript - 尝试使用 .innerHTMLlog 打印数据出现错误 Uncaught TypeError : undefined is not a function

JavaScript阶乘防止无穷大

JavaScript 数组推送检查重叠警报