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