在javascript中编写循环的更好方法

时间:2014-03-17 14:04:10

标签: javascript

我最近在文章

中看到了以下for循环
var i, len, arr = [1, 2, 3];
for (i = 0, len = arr.length; i < len; i++) {
     // do stuff here
}

但我不知道为什么应该使用上面的循环而不是以下

var i, arr = [1, 2, 3];
for (i = 0; i < arr.length; i++) {
     // do stuff here
}

哪个更好,哪个更适合使用?

3 个答案:

答案 0 :(得分:4)

唯一的区别似乎是缓存数组长度,这在某些情况下节省了一些时间,因为不必在每次迭代时查找length属性,但是对于具有三个索引的数组,它不会产生任何差异,如果数组也有一百万个索引,它可能不会产生太大的影响,所以无论你喜欢什么。

就个人而言,如果可能,我总是倾向于反向迭代,并避免缓存长度,活动节点列表和其他事情的问题。

for (var i=arr.length; i--;) {

}

答案 1 :(得分:1)

这可能是一种优化(或者像其他人已经提到的微优化)。

一个必须imo的情况是迭代 live DOM NodeList

var divs = document.getElementsByTagName( 'div' );
for (var i = 0; i < divs.length; i++ ) {
    // Neverending loop
    document.body.appendChild( document.createElement( 'div' ) );
}

使用 live 集合时,开发人员需要采取预防措施。通过缓存长度或拍摄集合的快照,然后迭代快照。

答案 2 :(得分:0)

在循环中使用函数length时,每次调用该函数。最好声明一个新变量并保存数组长度:

for(var j=0, arrayLength=array.length; j < arrayLength ;j++){}