如何判断JavaScript中的函数是否已定义?

我想做这样的事情

function something_cool(text, callback) {
    alert(text);
    if( callback != null ) callback();
}

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

typeof callback === "function"

其他回答

所有当前的答案都使用一个字面字符串,如果可能的话,我更喜欢在我的代码中没有-这不是(并且提供了有价值的语义含义,引导):

function isFunction(possibleFunction) {
  return typeof(possibleFunction) === typeof(Function);
}

就我个人而言,我试图减少代码中存在的字符串数量……


此外,虽然我知道typeof是一个操作符而不是一个函数,但使用语法使它看起来像后者并没有什么害处。

对于JavaScript新手,我不确定行为是否发生了变化,但如果没有定义可能函数,Jason Bunting(6年前)给出的解决方案将不起作用。

function isFunction(possibleFunction) {
  return (typeof(possibleFunction) == typeof(Function));
}

这将抛出一个ReferenceError:可能函数没有定义的错误,因为引擎试图解析符号可能函数(正如在Jason的回答的评论中提到的)

为了避免这种行为,您只能传递要检查是否存在的函数的名称。所以

var possibleFunction = possibleFunction || {};
if (!isFunction(possibleFunction)) return false;

这将变量设置为您想要检查的函数,如果它没有定义,则设置为空对象,从而避免了上面提到的问题。

如果你使用http://underscorejs.org,你有: http://underscorejs.org/#isFunction

_.isFunction(callback);

Try:

if (typeof(callback) == 'function')

我建议以下功能:

function isFunction(name) {
    return eval(`typeof ${name} === typeof Function`);
}