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

我想做这样的事情

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

但是它得到了一个

回调不是函数

未定义回调时发生错误。


当前回答

如果希望重新定义函数,最好使用函数变量,因为函数是全局定义的,无论它们出现在哪里。

创建一个新函数,调用之前同名的函数:

A=function() {...} // first definition
...
if (typeof A==='function')
   oldA=A;
A=function() {...oldA()...} // new definition

其他回答

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

一行的解决方案:

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

这对我很有效

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

Try:

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

我可能会

try{
    callback();
}catch(e){};

我知道有一个公认的答案,但没人这么建议。我不确定这是否符合惯用语的描述,但它适用于所有情况。

在较新的JavaScript引擎中,可以使用finally代替。