讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議22:少用函數迭代 >

建議22:少用函數迭代

ECMA-262v4為本地數組對像新增加了一個forEach方法。此方法遍歷一個數組的所有成員,並且在每個成員上執行一個函數。在每個元素上執行的函數作為forEach的參數傳進去,並在調用函數時接收3個參數:數組項的值、數組項的索引、數組自身。例如:


items.forEach(function(value,index,array){

process(value);

});


forEach在Firefox、Chrome和Safari等瀏覽器中為原生函數。另外,forEach在大多數JavaScript庫中都有等價實現,例如:


//YUI 3

Y.Array.each(items,function(value,index,array){

process(value);

});

//jQuery

jQuery.each(items,function(index,value){

process(value);

});

//Dojo

dojo.forEach(items,function(value,index,array){

process(value);

});

//Prototype

items.each(function(value,index){

process(value);

});


儘管基於函數的迭代使用起來非常便利,但是比基於循環的迭代要慢一些。每個數組項要關聯額外的函數調用是造成速度慢的主要原因。在所有情況下,基於函數的迭代佔用時間是基於循環的迭代的8倍,因此在非特殊需求下,不建議使用函數迭代。