We could do something like this:

```diff
diff --git a/underscore.js b/underscore.js
index 62b9605..c9fc438 100644
--- a/underscore.js
+++ b/underscore.js
@@ -74,14 +74,15 @@
   // sparse array-likes as if they were dense.
   var each = _.each = _.forEach = function(obj, iterator, context) {
     if (obj == null) return obj;
+    if (context != null) iterator = _.bind(iterator, context);
     if (obj.length === +obj.length) {
       for (var i = 0, length = obj.length; i < length; i++) {
-        if (iterator.call(context, obj[i], i, obj) === breaker) return;
+        if (iterator(obj[i], i, obj) === breaker) return;
       }
     } else {
       var keys = _.keys(obj);
       for (var i = 0, length = keys.length; i < length; i++) {
-        if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
+        if (iterator(obj[keys[i]], keys[i], obj) === breaker) return;
       }
     }
     return obj;
```

Whether or not this is an optimization I don't know. Perhaps we could leave your suggested changes for a follow-up pull request. I'm most concerned about fixing the API inconsistency.