问题描述
鉴于此代码:
var arr = [];
for (var i = 0; i < 10000; ++i)
arr.push(1);
转发
for (var i = 0; i < arr.length; ++i) {}
向后
for (var i = arr.length - 1; i >= 0; --i) {}
硬编码转发
for (var i = 0; i < 10000; ++i) {}
为什么向后的速度要快得多?
Why is backwards so much faster?
测试如下:http://jsperf.com/array-iteration-direction
推荐答案
因为你的 forwards-condition 每次都必须接收数组的 length
属性,而其他条件只需要检查大于零",一个非常快的任务.
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.
当你的数组长度在循环过程中没有变化,并且你真的很看重ns-perfomance时,你可以使用
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++)
顺便说一句:代替 for (var i = arr.length; i > 0; --i)
你可以使用 for (var i = arr.length; i--> 0; )
真正从 n-1 到 0,而不是从 n 到 1 遍历您的数组.
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.
这篇关于为什么向后迭代数组比向前迭代快的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!