Native bind vs jQuery.proxy vs Underscore bind (v21)

Revision 21 of this benchmark created on


Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js">
</script>
<script src="//ajax.googleapis.com/ajax/libs/mootools/1.3/mootools-yui-compressed.js"></script>
<script src="//d14ac9rbwzfcvh.cloudfront.net/javascriptsdk/evo-2/evo.min.js"></script>

Setup

MDNBind = function (fToBind, oThis) {
        if (typeof fToBind !== "function") {
          // closest thing possible to the ECMAScript 5 internal IsCallable function
          throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
        }
    
        var aArgs = Array.prototype.slice.call(arguments, 1), 
            fNOP = function () {},
            fBound = function () {
              return fToBind.apply( oThis,
                                   aArgs.concat(Array.prototype.slice.call(arguments)));
            };
    
        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();
    
        return fBound;
      };

Test runner

Ready to run.

Testing in
TestOps/sec
Native bind
var foo = (function(x) {
  return this + x;
}).bind(1);
foo(1);
ready
jQuery.proxy
var foo = jQuery.proxy(function(x) {
  return this + x;
}, 1);
foo(1);
ready
Underscore.js bind
var foo = _.bind(function(x) {
  return this + x;
}, 1);
foo(1)
ready
Without bind
var bar = function(x) {
  return this + x;
};
var foo = function(x) {
  bar.call(1, x);
}
foo(1);
ready
MooTools bind
var foo = function(x) {
  return this + x;
}.bind(1);
foo(1)
ready
Evo Ygloo
var foo = _$Y.gloo(function(x) {
  return this + x;
},1);
foo(1)
ready
Evo Bind
var foo = _$Y.bind(function(x) {
  return this + x;
},1);
foo(1)
ready
MDN shim
var foo = MDNBind(function(x) {
  return this + x;
},1);
foo(1)
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.