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

我想做这样的事情

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

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

如果变量没有定义,那些判断函数是否实现的方法也会失败,所以我们使用了更强大的支持接收字符串的方法:

function isFunctionDefined(functionName) {
    if(eval("typeof(" + functionName + ") == typeof(Function)")) {
        return true;
    }
}

if (isFunctionDefined('myFunction')) {
    myFunction(foo);
}

其他回答

一行的解决方案:

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

如果变量没有定义,那些判断函数是否实现的方法也会失败,所以我们使用了更强大的支持接收字符串的方法:

function isFunctionDefined(functionName) {
    if(eval("typeof(" + functionName + ") == typeof(Function)")) {
        return true;
    }
}

if (isFunctionDefined('myFunction')) {
    myFunction(foo);
}

使用函数调用的可选链接,你可以做到以下几点:

function something_cool(text, callback) {
    alert(text);
    callback?.();
}

如果callback是一个函数,它将被执行。

如果callback为null或未定义,则不会抛出错误,也不会发生任何事情。

然而,如果callback是其他东西,例如字符串或数字,TypeError仍然会被抛出。

Try:

if (typeof(callback) == 'function')
function something_cool(text, callback){
    alert(text);
    if(typeof(callback)=='function'){ 
        callback(); 
    };
}