Q:

The difference between `_.forEach` and `$.each`

These two functions,  _.forEach and $.each, taken respectively from underscore and jQuery seems to make the same thing.
What are the possible reasons to prefer one implementation to the other?

A:

_.forEach and $.each differs for the arguments passed to the callback.
If you use _.forEach, the first argument passed to the callback is the value, not the key.
So if you don't bother at all about the key you should use _.forEach.
Other differences:  

_.forEach it will be a bit faster as it uses the native Arrray.prototype.forEach in modern browsers.
the this value is also different. jQuery's behavior doesn't follow the standard, underscore's does.

A:

jQuery looks like:
something.each( function(index, Element) )

Underscore looks like:
_.each(list, function(Element, index, list), [context])
// or
_(list).each(function(Element, index, list), [context])

Native array.forEach looks like:
array.forEach(function(Element, index, list), [context])

So:

Underscore keeps the same argument order as native forEach
There are two differences between JQuery's and Underscore's implementation:

JQuery sets this to Element, native and Underscore allow you to provide your own context
Native and underscore also provide the list itself as third argument to the callback.

Edit: Why is it useful to be able to set the context?
Consider that you have some kind of object:
var worker = new FooWorker();
worker.process(something);
worker.process(somethingElse);

Say you want to call that method on every value from an array.
Using the context parameter, you can simply say:
myArray.forEach(worker.process, worker);

while without it you'd need to be more verbose (and do one more function call per element):
// native
myArray.forEach( function(i, e) {worker.process(e);} );
// jquery
$(myArray).each( function() {worker.process(this); } );

This is one situation where JQuery's foreaching convention makes things less convenient.

A:

Both of them mainly provide a replacement for the forEach function that isn't available in IE8.
They don't add much if you're iterating over arrays.
The main difference, apart the order of the callback arguments, is that in jQuery the value is also available as context of the callback's call (this is why the value, less important, is only the second argument provided). This isn't really a major reason to prefer it unless you really like to avoid passing an argument to the function :
var product = 1;
$.each([1, 2, 3], function(){ product *= this });

Most often, you don't use both libraries, so you simply use the iterating function provided by the library you have. 
If you happen to import both libraries, I would suggest to use the underscore function as 

it's the most similar to the standard ECMAScript function on arrays so you'll more easily migrate the day IE8 will be dead
it's more efficient as it uses the native function when it's available :

See source :
...
if (nativeForEach && obj.forEach === nativeForEach) {
     obj.forEach(iterator, context);
...

