JavaScript - 检查的最佳做法是功能

时间:2014-07-27 06:17:27

标签: javascript callback

我在调用之前看到了很多种用于检查回调函数的方法。

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();   

              }

我相信还有更多......

检查给定的“回叫”的最佳方法是什么?参数是函数吗?

为什么不使用其他例子。

4 个答案:

答案 0 :(得分:7)

  

if (callBack != null)

当然,为什么不呢。请注意,仍有许多非功能值通过此功能。

  

<强> if (typeof callBack == 'function')

这正是你想要的。

  

if (callBack !== null)

没有。 callBackundefined时无效。

  

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)

尝试使用Firefox或Chrome控制台

typeof someFunc === "function"

instanceof较慢

您可以在此处查看效果:jsperf.com

答案 3 :(得分:0)

if($.isFunction(callback)) {
    callback();
}

使用$ .isFunction(回调)来检查回调是否属于函数类型。 这也检查null / empty / undefined值。 如果回调是类型函数,则返回true,否则返回false