jQuery 看起来像:
something.each( function(index, Element) )
下划线看起来像:
_.each(list, function(Element, index, list), [context])
// or
_(list).each(function(Element, index, list), [context])
Native array.forEach 看起来像:
array.forEach(function(Element, index, list), [context])
所以:
- 下划线保持与原生
forEach相同的参数顺序
- JQuery 和 Underscore 的实现有两个区别:
- JQuery 将
this 设置为 Element,本机和下划线允许您提供自己的上下文
- 本机和下划线还提供列表本身作为回调的第三个参数。
编辑:为什么能够设置上下文很有用?
假设您有某种对象:
var worker = new FooWorker();
worker.process(something);
worker.process(somethingElse);
假设您想对数组中的每个值调用该方法。
使用上下文参数,您可以简单地说:
myArray.forEach(worker.process, worker);
如果没有它,您需要更详细(并且每个元素再调用一次函数):
// native
myArray.forEach( function(i, e) {worker.process(e);} );
// jquery
$(myArray).each( function() {worker.process(this); } );
这是 JQuery 的 foreaching 约定使事情变得不那么方便的一种情况。