49

翻阅有关 jQuery 1.4 的发行说明,我遇到了以下问题$.noop()

描述:一个空函数。(在 1.4 中添加)

当您希望传递一个什么都不做的函数时,您可以使用这个空函数。

也许我在这里遗漏了一些深刻的东西,但是传递一个空函数的实际用途是什么?

代码示例赞赏。

4

9 回答 9

52

这个功能是由于嵌入式系统在使用时的性能问题而提出的$.ajax,在 jQuery-Dev 邮件列表中报告。你可以看到线程

基本上,他们更喜欢引入和使用这个单一的空函数,而不是到处声明空的匿名函数。

现在这个函数在ajaxeventoffset模块内部使用。

您也可以在提交时查看提交。

于 2010-01-15T04:10:26.037 回答
20

如果你有一个函数接受一个函数作为参数,而你没有任何代码可以给它,你可以通过$.noop.

不过,我想不出在 jQuery 中参数一开始就不是可选的任何此类情况。

与 write 不同function(){},传递$.noop不会创建新的函数实例,节省一点内存。但是,如果您传递它来修改函数对象(例如,funcParam.id = 2),那么传递$.noop就会把事情搞砸。

于 2010-01-15T03:44:57.727 回答
10

现实世界的例子(差不多):

jQuery.fn.myAwesomeAjax = function(url, complete) {
  return jQuery.ajax(url || this.url)
    .complete(complete || jQuery.noop);
};

用它代替function (){}

于 2011-06-28T13:01:33.137 回答
4

可能如果一些糟糕的 API 需要一个函数作为参数,而您不想在其中做任何事情,这将是一种框架支持的方式来使这一点变得明显。

于 2010-01-15T03:44:35.010 回答
3

我使用了几个需要回调的插件,但对于某些部分,我实际上并不想使用某个回调。所以,我输入了 function() {}。

noop 在 jQuery 源代码中定义为

noop: function() {}

所以它适合任何你会使用空白函数的地方,比如上面的例子。

于 2010-01-15T03:54:05.740 回答
0

唯一合乎逻辑的原因是,如果您正在调用一个执行某项操作的函数并调用另一个函数,并且您希望更高级别的函数在不调用参数函数的情况下执行其操作。

大多数 jQuery 函数可选地接受一个参数函数,因此您不必传入一个。也许有一两个不是这种情况——或者它可能是为了帮助开发人员使用他们的自定义代码表现得像这样。

于 2010-01-15T03:44:05.667 回答
0

如果一个函数需要你将一个函数作为参数传递呢?说起来do_something($.noop)do_something(function(){}).

虽然不是很多...

...6 个字符...

...是的,该功能实际上看起来毫无用处。

于 2010-01-15T03:44:19.223 回答
0

在需要回调的情况下,这纯粹是一种方便/替代function(){}- 我认为我不会很快使用它。

我敢打赌,当 jQuery 团队把它放进去的时候,他们会笑得很开心,这也有一个喜剧的目的。

于 2010-01-15T03:45:14.157 回答
0

如果您有一个为其他功能提供功能的功能,它会很有用。

示例:您有一个数据列表。每个项目都有一个做某事的按钮。每个项目的“某物”可能不同。您有一个“FunctionFactory”,它接收项目并返回一个函数。如果您不希望按钮出于某种原因执行某些操作,那么最简洁的方法可能是返回一个空函数,因为这样您就知道您的 Factory 总是返回一个函数。

我没有 jQuery 的具体示例,但我想这在 .each 或 .map 块中使用时会派上用场。

于 2010-01-15T03:49:05.287 回答