如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
但是它得到了一个
回调不是函数
未定义回调时发生错误。
如何判断JavaScript中的函数是否已定义?
我想做这样的事情
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
但是它得到了一个
回调不是函数
未定义回调时发生错误。
当前回答
我可能会
try{
callback();
}catch(e){};
我知道有一个公认的答案,但没人这么建议。我不确定这是否符合惯用语的描述,但它适用于所有情况。
在较新的JavaScript引擎中,可以使用finally代替。
其他回答
对于全局函数,您可以使用这个函数来代替答案中建议的eval。
var global = (function (){
return this;
})();
if (typeof(global.f) != "function")
global.f = function f1_shim (){
// commonly used by polyfill libs
};
你可以使用global。f instanceof函数也一样,但是afaik。Function的值在不同的帧中是不同的,所以它只能在单个帧应用中正常工作。这就是为什么我们通常用typeof代替。注意,在某些环境中,f类型也可能出现异常,例如在MSIE 6-8中,一些函数(例如alert)具有“对象”类型。
通过局部函数,您可以使用接受的答案中的一个。你也可以测试这个函数是局部的还是全局的。
if (typeof(f) == "function")
if (global.f === f)
console.log("f is a global function");
else
console.log("f is a local function");
为了回答这个问题,示例代码在最新的浏览器中为我工作,没有错误,所以我不确定它有什么问题:
function something_cool(text, callback) {
alert(text);
if( callback != null ) callback();
}
注意:我将使用callback !== undefined而不是callback != null,但它们的作用几乎相同。
如果你看一下@Venkat Sudheer Reddy Aedama提到的库的来源,下划线,你可以看到:
_.isFunction = function(obj) {
return typeof obj == 'function' || false;
};
这只是我的提示,提示答案:>
使用函数调用的可选链接,你可以做到以下几点:
function something_cool(text, callback) {
alert(text);
callback?.();
}
如果callback是一个函数,它将被执行。
如果callback为null或未定义,则不会抛出错误,也不会发生任何事情。
然而,如果callback是其他东西,例如字符串或数字,TypeError仍然会被抛出。
Try:
if (!(typeof(callback)=='undefined')) {...}
if ('function' === typeof callback) ...