Javascript 如何发送一个";空";一个函数的值,该函数期望函数作为参数
在jQuery中,假设一个函数需要回调,或者其他类型的函数作为参数。在C中,您可以传递“null”,函数将不会运行。是否有任何值要传递给函数以使其想要运行的内部函数无效 例: 显然,这在jquery中不起作用(您将得到错误undefined不是一个函数)。我所做的工作是将函数更改为:Javascript 如何发送一个";空";一个函数的值,该函数期望函数作为参数,javascript,jquery,function,Javascript,Jquery,Function,在jQuery中,假设一个函数需要回调,或者其他类型的函数作为参数。在C中,您可以传递“null”,函数将不会运行。是否有任何值要传递给函数以使其想要运行的内部函数无效 例: 显然,这在jquery中不起作用(您将得到错误undefined不是一个函数)。我所做的工作是将函数更改为: function func1(variable, function){ dostuff(variable); if (function){ function(); } } 但是我认为有一个合适的
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-typedfunc&&func.call
关于冗余的好观点,我只是习惯于null
检查,并且有一种非常防御性的编码倾向。至于typeof
作为一个操作符,我总是忘记这一点。我总是想到我t本身就是一个函数。感谢您的提醒。:)
function func1(foo, func){
dostuff(food);
if (typeof func === 'function'){
func();
}
};