对于循环意外增量值

时间:2014-06-16 15:10:10

标签: 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/

2 个答案:

答案 0 :(得分:1)

循环结束时i变量的最后一个值为5。因此alert内的myFn()语句会说&#34;按钮5&#34;在页面加载。 for循环内函数内的alert语句通过闭包范围引用相同的变量。因此,按钮上的点击也会提醒&#34;按钮5&#34;。

希望它有所帮助!请参阅下面打印您想要的功能。警告是通过复制i的值(在JavaScript中按值传递机制)引入另一个闭包范围,以便onclick函数引用另一个变量i),其具有< strong>值的副本。

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();

答案 1 :(得分:0)

您必须更改以下功能:

<强> JS

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

}

myFn();

由于@Hunter McMillen提到i==5是阻止循环的条件。

这是fiddle