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

better way of writing for loop in javascript

本文关键字:循环 更好 方法 for javascript      更新时间:2023-09-26

我最近在文章

的某个地方看到了以下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
}

哪个更好,哪个更喜欢使用?

唯一的区别似乎是缓存数组的长度,这在某些情况下节省了一些时间,因为长度属性不必在每次迭代时都查找,但对于具有三个索引的数组来说,它没有任何区别,如果数组有一百万个索引,它可能也不会有太大的区别,所以做任何你喜欢的事情。

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

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

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

一个必须的情况是在live DOM NodeList s上迭代。

var divs = document.getElementsByTagName( 'div' );
for (var i = 0; i < divs.length; i++ ) {
    // Neverending loop
    document.body.appendChild( document.createElement( 'div' ) );
}
当使用实时集合时,开发人员需要采取预防措施。要么缓存长度,要么获取集合的快照,然后遍历快照。

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

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