0

それで、バインドと適用のどちらが速いのだろうかと思っていましたか?具体的な証拠はありますか(jsperfで約1時間遊んでみました。以下に回答してください)。

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 に答える