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

我想做这样的事情

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

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

如果callback()在函数中不只调用一次,你可以初始化参数以便重用:

callback = (typeof callback === "function") ? callback : function(){};

例如:

function something_cool(text, callback) {
    // Initialize arguments
    callback = (typeof callback === "function") ? callback : function(){};

    alert(text);

    if (text==='waitAnotherAJAX') {
        anotherAJAX(callback);
    } else {
        callback();
    }
}

限制是它将始终执行回调参数,尽管它是未定义的。

其他回答

typeof(callback) == "function"

这对我很有效

if( cb && typeof( eval( cb ) ) === "function" ){
    eval( cb + "()" );
}

一行的解决方案:

function something_cool(text, callback){
    callback && callback();
}

如果你看一下@Venkat Sudheer Reddy Aedama提到的库的来源,下划线,你可以看到:

_.isFunction = function(obj) {
  return typeof obj == 'function' || false;
};

这只是我的提示,提示答案:>

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

_.isFunction(callback);