$.noop()
,它是:
也许我在这里错过了什么深刻的东西,但传递一个空函数的实际用途是什么?描述:一个空函数。(添加于1.4版本)
当你想要传递一个什么也不做的函数时,可以使用这个空函数。
请提供代码示例。
$.noop()
,它是:
也许我在这里错过了什么深刻的东西,但传递一个空函数的实际用途是什么?描述:一个空函数。(添加于1.4版本)
当你想要传递一个什么也不做的函数时,可以使用这个空函数。
如果你有一个接受函数作为参数的函数,但是你没有任何代码可以提供给它,你可以传递$.noop
。
不过在 jQuery 中我无法想到这种参数不是可选的情况。
与编写 function(){}
不同,传递 $.noop
不会创建一个新的函数实例,从而节省一点内存。然而,如果你将其传递给其他修改函数对象的函数(例如,funcParam.id = 2
),那么传递 $.noop
就会破坏这些函数对象。
现实世界中的例子(几乎):
jQuery.fn.myAwesomeAjax = function(url, complete) {
return jQuery.ajax(url || this.url)
.complete(complete || jQuery.noop);
};
使用它,而不是 function() {}
如果某些糟糕的API要求一个函数作为参数,而你不想在其中执行任何操作,那么这就是一种通过框架支持的方式来明确表达这一点。
我使用了几个需要回调的插件,但是有些部分我并不想使用某个特定的回调函数。因此,我用函数() {}来代替。
noop在jQuery源代码中被定义为
noop: function() {}
因此,它可以适用于任何您使用空白函数的地方,例如上面的示例。
do_something($.noop)
比do_something(function(){})
更短。
虽然差别不大...
...只有6个字符...
...是的,这个特性看起来相当无用。
noop
的函数只创建一次。foo(function(){})每次执行该行时都会创建一个新的函数对象。然而,没有人在意,因为与您的JS代码的其余部分相比,它所需的时间更长。 - Nicolás在需要回调函数的上下文中,它纯粹是一个方便/替代function(){}
的工具 - 我不认为我会很快使用它。
我敢打赌,当jQuery团队把它放进去时,他们一定笑了很久,这也有喜剧效果。
如果您有一个提供函数给其他函数的函数,那么它可能非常有用。
例如:您有一组数据列表。每个项目都有一个按钮执行某些操作。对于每个项目,“某些操作”可能是不同的。您有一个“FunctionFactory”,它接受项目并返回一个函数。如果由于任何原因您不希望按钮执行任何操作,则最清晰的方法可能是返回一个空函数,因为这样您就知道您的工厂始终返回一个函数。
我没有jQuery的具体示例,但我想当在.each或.map块中使用时,这可能会很方便。