在for循环的每一次迭代中都会计算.length属性

Does the .length property gets evaluated on every iteration of a for loop?

本文关键字:迭代 计算 属性 length 一次 循环 for      更新时间:2023-09-26

我一直找不到这个问题的答案,比如说你有一个数组:

var myArray = ["a","b","c","d","e","f","g"]; // pretend I define up to 1000 elements

迭代数组的一种简单方法是:

for(var i=0; i<myArray.length; i++){
    console.log(myArray[i]);
}

我想弄清楚的是,如果在每次迭代中都会评估.length属性,那么如果我使用:

my len = myArray.length;
for(var i=0; i<len i++){
    console.log(myArray[i]);
}

第二种方法会提高性能吗?JS引擎是否会在每次迭代中计算length

确实如此!我喜欢这个解决方案

for(var i=0, len=myArray.length; i<len; i++){
    console.log(myArray[i]);
}

它只是比你贴的那个干净一点。

是的,但只有当这个循环执行数百万次时,性能才会显著提高。然而,如果该值不是.length,而是一个复杂的计算,那么无论如何都要这样做,尤其是如果它将运行数百万次。

例如,如果循环到length的20次方,则不应该每次迭代都这样做。