3

所以我一直在学习使用 C+ 来教授编程概念的计算机科学课程。今天我学到了一个我不确定是否适用于 JS 的新概念,其中每次计算 string.length 都会消耗系统资源。这似乎是一件小事,但它让我想到了巨大的阵列以及如何将它们加起来。看看这个例子,让我知道循环 #2 是否确实比第一个更有效,谢谢:

var weekDay = ["Monday", "Tuesday", "Wednesday"];

//for loop #1
for(i=0; i<weekDay.length; i++){
 //code code code
;}

//for loop #2
for(i=0; var n=weekDay.length; i<n; i++){
 //code code code
;}
4

4 回答 4

5

第二种方法更快,但不是很多。此外,还有一个小的语法错误

for( var i = 0, n = weekDay.length; i < n; i++ ){ ... }

这在 javascript 代码中很常见。请注意声明所有变量的重要性,var以免它们踩到错误的范围。

你可以在这里看到这个 js 性能测试:http: //jsperf.com/forloopiterator,它显示使用第二种方法时结果快了 24%。

于 2013-01-09T10:29:03.787 回答
2

首先,过早优化是万恶之源

第二; 你完全正确,循环#2更有效。

循环#1 会weekDay为循环的每次迭代计算长度。这意味着它将在 10,000 长度的数组中计算长度 10,000 次。

循环 #2 将计算的长度weekDay并将变量设置n为结果,因此我们将长度保存在变量中,而不是为每次迭代重新计算它。

阅读更多关于为什么过早优化不好的信息

于 2013-01-09T10:34:54.860 回答
0

我总是会明确地预先缓存长度,即

var n = weekDay.length;
var i;
for(i=0;i<n; i++){ 
do_something;
}

一种更清晰的方法,因为无论如何所有变量定义都被“提升”到函数的顶部。

于 2013-01-10T00:05:50.560 回答
0

这个问题已经被问过几次了…… 优化 JavaScript for 循环真的有必要吗?

我发现以下链接非常有帮助。基本上它取决于浏览器版本和供应商。

在某些情况下,例如 IE yes #2 更快

http://jsperf.com/loop-iteration-length-comparison-variations

于 2013-01-09T10:32:45.577 回答