我认为这可能只是性能问题 - http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2
似乎typeof
更快..所以我的问题是 - 哪个更适合使用?
答案 0 :(得分:95)
没有理由不使用typeof
。
不仅速度更快,而且ECMAScript specification确保所有函数都具有“函数”类型,并且只有函数可以具有“函数”类型:
此运算符专门用于获取值的类型,为什么不使用它呢?
答案 1 :(得分:12)
首先,Underscore不再使用该实现了。它优化为typeof
,除非typeof /./
返回function
,因为它至少在older versions of Chrome
您可以在源代码中找到它: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/3
它仍然在FF中显示出相当大的性能(但比你在问题中发布的天真实现要少得多),这是由于函数调用的开销与内联代码相比。