2016-05-17 37 views
2

我正在查看W3C Javascript Best Practices,我注意到他們以不同的方式編寫for循環。W3C JavaScript循環樣式

var f = document.getElementById('mainform'); 
var inputs = f.getElementsByTagName('input'); 
for(var i=0,j=inputs.length;i<j;i++){ 
    if(inputs[i].className === 'mandatory' && 
    inputs[i].value === ''){ 
    inputs[i].className += ' error'; 
    } 
} 

它們將輸入長度值賦值給j,然後將j與i進行比較。而不是直接比較inputs.length和i。他們不在指南中的任何地方,只是在某些地方。除了以這種方式編寫for-loop的偏好之外,還有其他原因嗎?

+2

緩存長度增加了循環性能 – maioman

回答

3

正如我所提到here,這是一個表現的事情。引用inputs.length將是每個循環迭代頂部的哈希表中的運行時屬性查找。將它緩存在局部變量中可以避免這種情況,並且結果可能非常顯着,特別是對於沒有JIT編譯的解釋器。

+1

我相信,這種情況更糟糕:瀏覽器將爲每次迭代查詢DOM,因爲集合可能在上一步之後發生了更改。 –

5

輕微的性能改善。

而不是讀取length從每次迭代後數組的屬性,使用緩存版本。

對於中等大小的陣列,這可能會被忽略很少的時間。