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

时间:2013-06-27 14:28:05

标签: javascript

我一直无法找到答案,例如你有阵列:

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吗?

2 个答案:

答案 0 :(得分:3)

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

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

它比你粘贴的那个更干净。

答案 1 :(得分:0)

是的,但如果这个循环执行了数百万次,那么它只会有明显的性能提升。但是,如果不是.length,那么这个值是一个复杂的计算,通过一切手段,特别是如果它将运行数百万次。

例如,如果你循环到length,比如20次幂,那么你不应该每次迭代都这样做。