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的值。