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

我想做这样的事情

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

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

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

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

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

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

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

其他回答

这对我很有效

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

大多数(如果不是所有)前面的答案都有调用该函数的副作用

以下是最佳实践

你有函数

函数myFunction() { var x = 1; } 直接测试的方法

/ /直接的方式 if((typeof window.myFunction)=='function') alert('myFunction是函数') 其他的 alert('myFunction未定义'); 使用字符串,因此只能在一个位置定义函数名

/ / byString var strFunctionName = ' myFunction ' if((typeof window[strFunctionName])=='function') Alert (s+' is function'); 其他的 警报(s+'未定义');

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

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

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

Try:

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