Javascript for循环的疑惑

之前看很多人这样写for循环,感到很困惑,直接i<divs.length不就行了,为什么要多此一举加一个len呢?

for(var i=0, len=divs.length; i<len; i++){

  ...
}

昨天晚上再看javascript高级程序设计(第二版)发现有说这个问题的,说的是迭代nodeList时会出现无限循环的问题

例如:

var divs = document.getElementsByTagName("div");

for(var i=0; i<divs.length; i++){ 
  var div = document.createElement("div");
  document.body.appendChild(div);
}

这段代码会无限循环,那是因为divs.length会动态更新。

divs并不是保存的一个固定的nodeList集合,当运行到i<divs.length时,divs会重新获取所有的div

解决这个问题的方法是多加一个用于保存集合长度的len,

for(var i=0, len=divs.length; i<len; i++){

  //len保存的是divs的一个片段,该值是固定的

  var div = document.createElement("div");
  document.body.appendChild(div);
}

所以为了保证代码的稳定性,for循环中length应该是保持固定的,即每次都多一个len保存length的值。

原文地址:https://www.cnblogs.com/load/p/2804527.html