首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议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倍,因此在非特殊需求下,不建议使用函数迭代。