如何判断是否定义了JavaScript函数

时间:2020-03-05 18:59:31  来源:igfitidea点击:

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

我想做这样的事情

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

但这让我

callback is not a function

未定义回调时发生错误。

解决方案

回答

typeof callback === "function"

回答

尝试:

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

回答

typeof(callback) == "function"

回答

尝试:

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

回答

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

回答

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

请注意,如果回调是undefined,null,null,0或者false,则回调本身将为false。与null相比,过于具体。

回答

当前所有的答案都使用文字字符串,如果可能的话,我宁愿不要在我的代码中使用文字字符串(并且提供有价值的语义含义以进行引导):

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

就个人而言,我尝试减少代码中徘徊的字符串数量。

同样,虽然我知道typeof是一个运算符而不是一个函数,但是使用使它看起来像后者的语法几乎没有什么害处。

回答

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

回答

如果未定义变量,则那些用于判断是否实现函数的方法也会失败,因此我们使用了更强大的功能来支持接收字符串:

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

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