Javascript 如何发送一个";空";一个函数的值,该函数期望函数作为参数

Javascript 如何发送一个";空";一个函数的值,该函数期望函数作为参数,javascript,jquery,function,Javascript,Jquery,Function,在jQuery中,假设一个函数需要回调,或者其他类型的函数作为参数。在C中,您可以传递“null”,函数将不会运行。是否有任何值要传递给函数以使其想要运行的内部函数无效 例: 显然,这在jquery中不起作用(您将得到错误undefined不是一个函数)。我所做的工作是将函数更改为: function func1(variable, function){ dostuff(variable); if (function){ function(); } } 但是我认为有一个合适的

在jQuery中,假设一个函数需要回调,或者其他类型的函数作为参数。在C中,您可以传递“null”,函数将不会运行。是否有任何值要传递给函数以使其想要运行的内部函数无效

例:

显然,这在jquery中不起作用(您将得到错误undefined不是一个函数)。我所做的工作是将函数更改为:

function func1(variable, function){
 dostuff(variable);
  if (function){
   function(); 
  }
}

但是我认为有一个合适的方法吗?

您这样做是很常见的,您也可以只传递一个空函数来避免if-then检查:

func1(144,function(){});

你对它有一个大致的概念,你可以把函数作为参数传递给另一个函数,方法和你做的差不多,但是我建议你用不同的方法命名函数变量的参数,例如,
func
而不是
function
,因为
function
是JavaScript的语法关键字

此外,如果要继续执行条件检查,要查看传入的
函数是否存在(并且是函数),可以执行以下操作:

function func1(foo, func){
    dostuff(food);
    if (typeof func === 'function'){
       func();
    }
};
将条件从
if(func).
更改为上述,
typeof func===“function”
使用运算符检查并确保不仅存在
func
,而且它实际上是一个可以调用的函数

jQuery还提供了库中的内置调用,以评估传递的对象是否是函数,请参见,例如
$.isFunction(func)

请参见以下JSFIDLE作为示例:


(感谢下面的评论员澄清了typeof!)的用法。

哦。。。我做了一些普通的事!这是我的进步。哈哈。我很惊讶没有土生土长的方式。呵呵,是的,当我说“普通”时,我并没有恶意。我只是看到它经常被使用。if-then基本上是检查变量是否为null、未定义或false,因此它工作得非常好!如果您想执行If,那么可以在一行中执行function&&function();在jQuery中,您可以使用速记
$.noop
,这与使用
function(){}
在达到每日配额时我给您+1的用法完全相同:(只需去掉第二个参数,它将“通过”
undefined
,这是错误的,不需要传递
null
func&&
是多余的和不必要的。
typeof
即使在其操作数未定义或甚至未声明的情况下也能工作。(也就是说,它不能抛出
ReferenceError
),加上@josh3736所说的,typeof是一个运算符,因此您可以(为了清楚起见,应该)省略它周围的括号。
typeof func===“function”
另一种选择是duck-typed
func&&func.call
关于冗余的好观点,我只是习惯于
null
检查,并且有一种非常防御性的编码倾向。至于
typeof
作为一个操作符,我总是忘记这一点。我总是想到我t本身就是一个函数。感谢您的提醒。:)
function func1(foo, func){
    dostuff(food);
    if (typeof func === 'function'){
       func();
    }
};