以下似乎是 Javascript :
中非常常见的做法for (var i = array.Length - 1; i >= 0; i--) { /* do stuff here */ };
我从未在其他语言中注意到这一点......它是否有任何好处:
for (var i = 0; i < array.Length; i++) { /* do stuff here */ };
唯一想到的是在第一个中缓存数组长度,这不会是我猜的那么大的性能。你也可以:
var top = array.Length;
for (var i = 0; i < top; i++) { /* do stuff here */ };
为您提供相同的benefit
缓存,但如果您最小化代码可能会少performant
(在缩小脚本时可能会削减8个字符)
答案 0 :(得分:3)
有时,它会产生巨大的差异。
var nodes = element.children, l = nodes.length, i;
for( i=0; i<l; i++) element.removeChild(nodes[i]);
// ^ FAILS WITH ERROR (unless l is 0 or 1)
for( i=l-1; i>=0; i--) element.removeChild(nodes[i]);
// ^ works
答案 1 :(得分:1)
正如其他答案中所提到的,当您从数组中删除元素时,向后移动会使事情变得更容易,但它也会提供轻微的性能提升,如this example (jsperf)中所示。我怀疑从最后开始并按照你的方式开始工作更快,因为你不必在循环的每次迭代后都获取数组的length属性。