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倍,因此在非特殊需求下,不建议使用函数迭代。