それで、バインドと適用のどちらが速いのだろうかと思っていましたか?具体的な証拠はありますか(jsperfで約1時間遊んでみました。以下に回答してください)。
質問する
126 次
1 に答える
2
http://jsperf.com/apply-verses-bind/3
ご覧のとおり、いくつかの状況を実行しましたが、関数をラップしてスコープで関数を呼び出すのが最も高速であることがわかりました ( bind
orよりも約 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 に答える