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

che*_*zer 1 javascript callback

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

1)

 function(callBack)    
      {    
           ...
           if(callBack != null)
              callBack();   
      }      
Run Code Online (Sandbox Code Playgroud)

2)

  function(callBack)    
          {    
               ...
               if(typeof callBack == 'function')
                  callBack();   
          }  
Run Code Online (Sandbox Code Playgroud)

3)

  function(callBack)    
          {    
               ...
               if(callBack !== null)
                  callBack();   
          } 
Run Code Online (Sandbox Code Playgroud)

4)

  function(callBack)    
          {    
               ...
               if(callBack != undefined)
                  callBack();   
          }
Run Code Online (Sandbox Code Playgroud)

5)

   function(callBack)    
          {    
               ...
               try{    
                  callBack();  
                  } catch(err) {}

          }
Run Code Online (Sandbox Code Playgroud)

6)

   function(callBack)    
          {    
               ...
                if (callBack && typeof(callBack) == "function")
                  callBack();   

          }
Run Code Online (Sandbox Code Playgroud)

7)

    function(callBack)    
          {    
               ...
                if(callBack)
                  callBack();   

          }
Run Code Online (Sandbox Code Playgroud)

8)

    function(callBack)    
              {    
                   ...
                    if(typeof window[callBack] === 'undefined')
                      callBack();   

              }
Run Code Online (Sandbox Code Playgroud)

9)

  function(callBack)    
              {    
                   ...
                    if(callBack instanceof Function)
                      callBack();   

              }
Run Code Online (Sandbox Code Playgroud)

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

检查给定的'callBack'参数是否为函数的最佳方法是什么?

为什么不使用其他例子.

Ber*_*rgi 7

if (callBack != null)

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

if (typeof callBack == 'function')

这正是你想要的.

if (callBack !== null)

号时不工作callBackundefined.

if (callBack != undefined)

而不是.请参阅如何在JavaScript中检查"未定义"?为什么null有利(虽然相当).

try{ callBack(); } catch(err) {}

呃,可能更慢,吞下回调中的任何错误.如果这是你想要的,你仍然应该将它与其他测试结合起来.

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

冗余,但可能比单纯的typeof测试更快.如果你关心性能,你会想要测试这个,否则几乎没有理由这么冗长.

if (callBack)

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

if (typeof window[callBack] === 'undefined')

不,这绝对是一件非常不同的事情.

if (callBack instanceof Function)

这应该适用于除了一些极端边缘情况之外的所有情况,但使用typeof更安全(和更快).