给定这段代码:
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) {}
为什么向后快这么多?
最佳答案
因为您的转发条件每次都必须接收数组的 length
属性,而另一个条件只需要检查“大于零”,这是一项非常快速的任务。
当你的数组长度在循环过程中没有变化,并且你真正关注 ns-perfomance 时,你可以使用
for (var i=0, l=arr.length; i<l; i++)
顺便说一句:您可以使用 for (var i = arr.length; i--> 而不是
真正从 n-1 到 0 遍历您的数组,而不是从 n 到 1。for (var i = arr.length; i > 0; --i)
0; )
关于javascript - 为什么向后迭代数组比向前迭代更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689573/