如果需要在for循环中缓存长度值,我相信很多程序猿都卷入了这个问题。

在JS性能优化中,有一个常见的小优化,即




非缓存
对于(var i = 0;i < arr.length;i++){
…
}

缓存
VaR len = arr.length;
对于(var i = 0;i < i;i + +){
…
}




那么,我们是否应该放弃这种写作方式,还有另一种情况必须加以利用。

看看例子:

复制代码代码如下所示:

var div = document.getelementsbytagname(div),我,DIV;

为(i = 0;i < divs.length;i++){

div = document.createelement(div);

document.body.appendchild(div);

}



上面的代码会导致无限循环:第一行代码将获得所有的div元素的节点列表,因为列表是动态的,只要有一个新的div添加到页面上,下一个周期将在divs.length评价,所以我和divs.length每次会增加,他们不平等的价值,创造了一个死循环。

所以如果你想遍历列表,最好是用长度属性初始化二变量,然后比较迭代器的变量,修改的代码如下:

复制代码代码如下所示:

var div = document.getelementsbytagname(div),我,DIV,Len;

为(i = 0;len = divs.length;我< len;i++){

div = document.createelement(div);

document.body.appendchild(div);

}



在这个例子中,Len的初始化,由于晶状体divs.length快照保存在一个周期的开始,因此避免无限循环的一个例子,所以当需要迭代的列表,用这种方法进行保险。

总结:

1、缓存长度值有助于性能优化。这是一个根据具体情况来判断的问题。一般来说,减少DOM访问是很好的。

2。当你需要操作的节点列表,建议长度的值被缓存,以避免死循环。

以上内容全面介绍了在for循环中缓存长度值的需要,希望您喜欢它。