Why is iterating through an array backwards faster than forwards

Given this code:

var arr = [];

for (var i = 0; i < 10000; ++i)
    arr.push(1);

Forwards

for (var i = 0; i < arr.length; ++i) {}

Backwards

for (var i = arr.length - 1; i >= 0; --i) {}

Hard-coded Forward

for (var i = 0; i < 10000; ++i) {}

Why is backwards so much faster?

Here is the test: http://jsperf.com/array-iteration-direction


Because your forwards-condition has to receive the length property of your array each time, whilst the other condition only has to check for "greater then zero", a very fast task.

When your array length doesn't change during the loop, and you really look at ns-perfomance, you can use

for (var i=0, l=arr.length; i<l; i++)

BTW: Instead of for (var i = arr.length; i > 0; --i) you might use for (var i = arr.length; i-- > 0; ) which really runs through your array from n-1 to 0, not from n to 1.


Because in the first form you are accessing the property length of the array arr once for every iteration, whereas in the second you only do it once.