在AS3中,我认为你应该在循环之外初始化所有变量以提高性能。JavaScript也是这样吗?哪个更好/更快/最佳实践?
var value = 0;
for (var i = 0; i < 100; i++)
{
value = somearray[i];
}
or
for (var i = 0 ; i < 100; i++)
{
var value = somearray[i];
}
在AS3中,我认为你应该在循环之外初始化所有变量以提高性能。JavaScript也是这样吗?哪个更好/更快/最佳实践?
var value = 0;
for (var i = 0; i < 100; i++)
{
value = somearray[i];
}
or
for (var i = 0 ; i < 100; i++)
{
var value = somearray[i];
}
当前回答
我更喜欢将可读性和性能结合起来。 所以我最喜欢在循环中声明变量,这意味着我将有块作用域封装。
for (let i = 0, sum = 0; i < count; i++) { // count also be declared here like count = array.length;
sum = sum + 1;
}
根据之前提供的小提琴性能测试,获胜者是4号
其他回答
我只是在Chrome上做了一个简单的测试。在浏览器中尝试这一方法并查看结果
var count = 100000000;
var a = 0;
console.log(new Date());
for (var i=0; i<count; i++) {
a = a + 1
}
console.log(new Date());
var j;
for (j=0; j<count; j++) {
a = a + 1;
}
console.log(new Date());
var j;
for (j=0; j<count; j++) {
var x;
x = x + 1;
}
console.log(new Date());
结果是最后一次测试需要~8秒,前两次测试只需~2秒。非常重复,不考虑顺序。
所以,这向我证明了,应该总是在循环之外声明变量。对我来说,奇怪的情况是我在for()语句中声明I的第一个情况。这个测试似乎和第二个测试一样快,在第二个测试中,我预先声明了索引。
明年,所有浏览器都将拥有预编译代码的JS引擎,因此性能差异(来自于一次又一次解析同一块代码以及执行赋值)应该可以忽略不计。
此外,除非迫不得已,否则永远不要优化性能。将变量放在第一次需要它们的位置附近可以使代码干净。消极的一面是,习惯于使用块作用域的语言的人可能会感到困惑。
关于在Linux操作系统上运行Chrome、Firefox和jsperf测试后的性能,循环中的变量声明和循环外的变量声明之间确实存在性能差异。这是一个很小的差异,但这也与迭代的数量和变量声明的数量有关。
因此,为了获得最佳性能,我建议在循环之外声明变量。或者更好的方法是将变量声明成一行。看到的例子。
// inline
for (var ai = 0, al = 100000000, av; ai < al; ai++) {
av = av + 1;
}
// outside
var bv;
var bl = 100000000;
for (var bi = 0; bi < bl; bi++) {
bv = bv + 1;
}
注意变量'al'和'av'是如何在for循环声明行中出现的。这种内联声明一直为我提供了更好的性能。甚至在循环之外的变量声明。同样,性能差异非常小。
https://jsperf.com/outside-inline-for-loop-ase/1
嗯,这取决于你想要达到什么目标……如果value只是循环块中的一个临时变量,那么使用第二种形式会更清楚。它也更有逻辑性和啰嗦。
JavaScript是一种底层由C或c++编写的语言,我不太确定它是哪一种。它的目的之一是节省处理内部内存的麻烦。 即使在C或c++中,当变量在循环中声明时,您也不必担心是否会消耗大量资源。在JavaScript中为什么要担心这个呢?