私はそれが唯一のパフォーマンスケースかもしれないと思う- http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2
typeof
の方が速いようです。私の質問は-どちらを使用するのが適切ですか?
typeof
を使用しない理由はありません。
より高速であるだけでなく、 ECMAScript仕様 により、すべての関数が「関数」のタイプを持ち、関数のみが「関数」のタイプを持つことができます。
この演算子は、値の型を取得するために特別に設計されたので、使用しないのはなぜですか?
まず、Underscoreはその実装を使用しなくなりました。 Chromeの古いバージョン で行われたように、typeof /./
がtypeof
を返さない限り、function
に最適化されます。
ソースコードでこれを見つけることができます: http://underscorejs.org/underscore.js
// Optimize `isFunction` if appropriate.
if (typeof (/./) !== 'function') {
_.isFunction = function(obj) {
return typeof obj === 'function';
};
}
新しいjsperf: http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/
FFでのパフォーマンスヒットはかなりあります(ただし、質問で投稿した素朴な実装よりもはるかに少ない)。これは、関数呼び出しとインライン化コードのオーバーヘッドによるものです。