2014-01-14 41 views
2

下面好像在的Javascript一個非常普遍的做法:任何理由來遍歷數組從結束開始在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

完全取決於「東西」是什麼。 –

+2

另一個原因:允許您在遍歷數組時移除數組中的項目。 – McGarnagle

+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

正如在其他的答案中提到,倒退,使事情變得更容易,當你去除數組中的元素,但它也確實提供了所看到的this example (jsperf)輕微的性能提升。我懷疑從頭開始並開始工作會更快,因爲在循環的每次迭代之後,您都不必抓取數組的長度屬性。