_.isFunction(a) void typeof a === 'function'? Javascript

Я думаю, что это может быть только случай производительности - http://jsperf.com/comparing-underscore-js-isfunction-with-typeof-function/2

И кажется, что typeof быстрее.. поэтому мой вопрос - что более целесообразно использовать?

Ответ 1

Нет причин не использовать typeof.

Это не только быстрее, но спецификация ECMAScript гарантирует, что все функции имеют тип "функции" и что только функции могут иметь тип "функции":

enter image description here

Этот оператор был специально разработан для получения типа значения, поэтому почему бы не использовать его?

Ответ 2

Во-первых, Underscore больше не использует эту реализацию. Он оптимизируется до typeof, если typeof /./ не возвращает function, как это обычно было в старых версиях 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 (но МНОГО меньше, чем наивная реализация, которую вы опубликовали в вопросе), что связано с накладными расходами на вызов функции, а не только на код.