Underscore bind vs jQuery.proxy vs Lo-Dash bind (v43)

Revision 43 of this benchmark created on


Preparation HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
<script>
 var lodash = _.noConflict();
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Underscore bind
var foo = _.bind(function (x) {
    return this + x;
}, 1);
ready
jQuery.proxy
var foo = jQuery.proxy(function (x) {
    return this + x;
}, 1);
ready
Lo-Dash bind
var foo = lodash.bind(function (x) {
    return this + x;
}, 1);
ready
Native bind
if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
        if (typeof this !== '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),
            fToBind = this,
            FNOP = function () {
            },
            fBound = function () {
                return fToBind.apply(this instanceof FNOP && oThis ? this : oThis,
                    aArgs.concat(Array.prototype.slice.call(arguments)));
            };

        FNOP.prototype = this.prototype;
        fBound.prototype = new FNOP();

        return fBound;
    };
}

var foo = function (x) {
    return this + x;
}.bind(1);
ready

Revisions

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