0

所以我想知道哪个更快绑定或应用?有具体的证据吗(我在 jsperf 上玩了大约一个小时,下面回答)。

4

1 回答 1

2

http://jsperf.com/apply-verses-bind/3

如您所见,我已经运行了几种情况,但事实证明,包装函数并在作用域上调用函数是最快的(大约比bindor快 2 倍apply)。

对于那些懒得检查 jsperf 的人,这里是结果。

var myObject = {
    count: 0,
    fn: function() {
        this.count += 1;
    }
};

var bindFn = myObject.fn.bind(myObject);
var applyFn = (function(fn, scope) {
    return function() {
        fn.apply(scope, []);
    }
})(myObject.fn, myObject);
var unboundFn = myObject.fn;
var preBound = (function(fn, scope) {
    return function() {
        scope[fn]();
    };
})('fn', myObject);

preBound以大约 2 倍的速度获胜。所以我想到了一个很棒的实用程序类。

return {
    superBind: function(fn, scope) {
        return function() {
            scope[fn]();
        }
    }
};

和繁荣,超级绑定:)

于 2013-05-28T14:39:50.847 回答