反向循环真的更快吗?

我听过很多次了。JavaScript循环在向后计数时真的更快吗?如果是,为什么?我看过一些测试套件示例,表明反向循环更快,但我找不到任何解释!

我假设这是因为循环不再需要在每次检查以查看它是否完成时都计算属性,而它只是检查最终的数值。

for (var i = count - 1; i >= 0; i--)
{
  // count is only evaluated once and then the comparison is always on 0.
}

答案 1

这不是比.实际上,它们都同样快。i--i++

在升序循环中需要时间的是,对于每个循环,计算数组的大小。在此循环中:i

for(var i = array.length; i--;)

在声明 时,您只计算一次,而对于此循环.lengthi

for(var i = 1; i <= array.length; i++)

每次递增时,您都会进行评估,当您检查是否 ..lengthii <= array.length

在大多数情况下,您甚至不必担心这种优化


答案 2

这个家伙在javascript中比较了很多循环,在很多浏览器中。他还有一个测试套件,所以你可以自己运行它们。

在所有情况下(除非我在阅读中遗漏了一个),最快的循环是:

var i = arr.length; //or 10
while(i--)
{
  //...
}