Suponha que eu tenha qualquer variável, que é definida da seguinte forma:
var a = function() {/* Statements */};
Quero uma função que verifique se o tipo da variável é semelhante à função, ou seja..:
function foo(v) {if (v is function type?) {/* do something */}};
foo(a);
Como posso verificar se a variável a' é do tipo
Função' da forma definida acima?
O modo de sublinhar's é mais eficiente, mas a melhor maneira de verificar, quando a eficiência é't um problema, está escrito no sublinhado's página ligada por @Paul Rosania.
Inspirada pelo sublinhado, a função isFunção final é a seguinte:
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
Underscore.js usa um teste mais elaborado, mas de alto desempenho:
_.isFunction = function(obj) {
return !!(obj && obj.constructor && obj.call && obj.apply);
};
Ver: http://jsperf.com/alternative-isfunction-implementations
EDIT: testes atualizados sugerem que o tipo de teste pode ser mais rápido, veja http://jsperf.com/alternative-isfunction-implementations/4