【发布时间】:2011-01-05 09:01:07
【问题描述】:
翻阅关于 jQuery 1.4 的发行说明,我发现$.noop() 是:
描述:一个空函数。 (在 1.4 中添加)
当你想传递一个什么都不做的函数时,你可以使用这个空函数。
也许我在这里遗漏了一些深刻的东西,但是传递一个空函数到底有什么实际用途?
感谢代码示例。
【问题讨论】:
标签: javascript jquery jquery-1.4 noop
翻阅关于 jQuery 1.4 的发行说明,我发现$.noop() 是:
描述:一个空函数。 (在 1.4 中添加)
当你想传递一个什么都不做的函数时,你可以使用这个空函数。
也许我在这里遗漏了一些深刻的东西,但是传递一个空函数到底有什么实际用途?
感谢代码示例。
【问题讨论】:
标签: javascript jquery jquery-1.4 noop
如果你有一个函数接受一个函数作为参数,而你没有任何代码可以给它,你可以传递$.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 需要一个函数作为参数,而您不想在其中做任何事情,那么这将是一种框架支持的方式来使这一点变得显而易见。
【讨论】:
我使用了几个需要回调的插件,但对于某些部分,我实际上并不想使用某个回调。所以,我输入了 function() {}。
noop 在 jQuery 源代码中定义为
noop: function() {}
因此它适用于您使用空白函数的任何地方,例如上面的示例。
【讨论】:
唯一合乎逻辑的原因是,如果您调用的函数执行某项操作并调用另一个函数,并且您希望更高级别的函数执行其操作而不调用参数函数。
大多数 jQuery 函数都可以选择使用参数函数,因此您不必传入一个。也许有一两个不是这种情况——或者它可能是为了帮助开发人员使用他们的自定义代码,其行为类似于这个。
【讨论】:
如果一个函数需要你传递一个函数作为参数呢? do_something($.noop) 比 do_something(function(){}) 更短。
虽然不是很多...
...6 个字符...
...是的,这个功能实际上看起来很没用。
【讨论】:
noop 的函数在加载jquery 库时创建一次。 foo(function(){}) 每次执行该行时都会创建一个新的函数对象。然而,没人关心,因为相比之下,你的 JS 代码的其余部分会花费更多时间。
如果你有一个函数可以为其他函数提供函数,它会很有用。
示例:您有一个数据列表。每个项目都有一个做某事的按钮。每个项目的“某物”可能不同。您有一个“FunctionFactory”,它接收项目并返回一个函数。如果您出于某种原因不希望按钮执行某项操作,那么最简洁的方法可能是返回一个空函数,因为这样您就知道您的工厂总是返回一个函数。
我没有 jQuery 的具体示例,但我想这在 .each 或 .map 块中使用时会派上用场。
【讨论】:
在需要回调的情况下,这纯粹是 function(){} 的方便/替代 - 我认为我不会很快使用它。
我敢打赌,当 jQuery 团队把它放进去的时候,他们笑得很开心,这也有喜剧目的。
【讨论】: