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

我想做这样的事情

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

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

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

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

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

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

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

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

其他回答

Try:

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

请注意,如果callback为undefined、null、0或false,则它的计算结果为false。与null的比较过于具体。

Try:

if (!(typeof(callback)=='undefined')) {...}

一行的解决方案:

function something_cool(text, callback){
    callback && callback();
}
typeof callback === "function"