сделал прогонку 1000000 раз.
test=function(fu, i, name){
console.time(name)
while(--i){fu()}
console.timeEnd(name)
}
arr="foo bar baz flk jdjdj dkkdke jdj".split(" ")
tst1=function(){
for(var i=0; i<arr.length; i++){arr[i]}
}
tst1_a=function(){
for(var i=arr.length; i>-1; i--){arr[i]}
}
tst2=function(){
var i = arr.length
while(i--){arr[i]}
}
dflt=1000000
test(tst1, dflt, "ts1")
test(tst1_a, dflt, "ts1_a")
test(tst2, dflt, "ts2")
//ts1: 23ms
//ts1_a: 263ms
//ts2: 41ms
Как видно, while сливает в 2 раза почти, но 2-й for просто фантастически медленный. Интересно, почему? Тестировал на ноде.