我在调用之前看到了很多种用于检查回调函数的方法。
1)
function(callBack)
{
...
if(callBack != null)
callBack();
}
2)
function(callBack)
{
...
if(typeof callBack == 'function')
callBack();
}
3)
function(callBack)
{
...
if(callBack !== null)
callBack();
}
4)
function(callBack)
{
...
if(callBack != undefined)
callBack();
}
5)
function(callBack)
{
...
try{
callBack();
} catch(err) {}
}
6)
function(callBack)
{
...
if (callBack && typeof(callBack) == "function")
callBack();
}
7)
function(callBack)
{
...
if(callBack)
callBack();
}
8)
function(callBack)
{
...
if(typeof window[callBack] === 'undefined')
callBack();
}
9)
function(callBack)
{
...
if(callBack instanceof Function)
callBack();
}
我相信还有更多......
检查给定的“回叫”的最佳方法是什么?参数是函数吗?
为什么不使用其他例子。
答案 0 :(得分:7)
if (callBack != null)
当然,为什么不呢。请注意,仍有许多非功能值通过此功能。
<强>
if (typeof callBack == 'function')
强>
这正是你想要的。
if (callBack !== null)
没有。 callBack
为undefined
时无效。
if (callBack != undefined)
而不是。请参阅How to check for "undefined" in JavaScript?了解null
为何受欢迎(尽管等效)。
try{ callBack(); } catch(err) {}
呃,可能更慢,吞下回调中的任何错误。如果这是您想要的,您仍应将其与其他测试结合起来。
if (callBack && typeof(callBack) == "function")
冗余,但可能比仅仅typeof
测试更快。如果你关心表现,你会想要测试这个,否则几乎没有理由这么冗长。
if (callBack)
当然,为什么不呢。请注意,仍有许多真实的非功能值通过它。
if (typeof window[callBack] === 'undefined')
没有。这绝对是一件非常不同的事情。
if (callBack instanceof Function)
这应该适用于除了一些极端边缘情况之外的所有情况,但使用typeof
更安全(更快)。
答案 1 :(得分:1)
我认为严格检查typeof
功能
typeof(callback)==='function'.
只是想指出这些东西也给出了function
typeof(Object)==='function' //returns true
typeof(Array)==='function' //returns true
typeof(String)==='function' //returns true
typeof(Date)==='function' //returns true
typeof(Object)==='function' //returns true
答案 2 :(得分:0)
答案 3 :(得分:0)
if($.isFunction(callback)) {
callback();
}
使用$ .isFunction(回调)来检查回调是否属于函数类型。 这也检查null / empty / undefined值。 如果回调是类型函数,则返回true,否则返回false