【问题标题】:What real purpose does $.noop() serve in jQuery 1.4?$.noop() 在 jQuery 1.4 中的真正用途是什么?
【发布时间】:2011-01-05 09:01:07
【问题描述】:

翻阅关于 jQuery 1.4 的发行说明,我发现$.noop() 是:

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

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

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

感谢代码示例。

【问题讨论】:

    标签: javascript jquery jquery-1.4 noop


    【解决方案1】:

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

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

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

    你也可以看看commit的介绍。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 在执行之前不必检查每个传递的函数参数是否未定义,或者在调用函数时,每次都必须提供 function(){},这很好。
      【解决方案3】:

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

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

      用它代替function (){}

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 确实,这就是它在 jQuery 本身中的使用方式——当没有真正的回调可用时,它是一个明显的占位符。
        【解决方案5】:

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

        noop 在 jQuery 源代码中定义为

        noop: function() {}
        

        因此它适用于您使用空白函数的任何地方,例如上面的示例。

        【讨论】:

          【解决方案6】:

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

          大多数 jQuery 函数都可以选择使用参数函数,因此您不必传入一个。也许有一两个不是这种情况——或者它可能是为了帮助开发人员使用他们的自定义代码,其行为类似于这个。

          【讨论】:

            【解决方案7】:

            如果一个函数需要你传递一个函数作为参数呢? do_something($.noop)do_something(function(){}) 更短。

            虽然不是很多...

            ...6 个字符...

            ...是的,这个功能实际上看起来很没用。

            【讨论】:

            • 它避免了新函数的开销。
            • 我不会指望这一点,SLaks - 查看源代码中的 noop 代码:noop: function() {},
            • @Salsa:但它总是相同的功能。到处使用 $.noop() ,它是相同的,单个无操作函数的单个实例。我怀疑大多数 JS 虚拟机是否有足够的开销来产生任何明显的差异,但理论上......
            • 其实 SLaks 是对的。分配给noop 的函数在加载jquery 库时创建一次。 foo(function(){}) 每次执行该行时都会创建一个新的函数对象。然而,没人关心,因为相比之下,你的 JS 代码的其余部分会花费更多时间。
            • 好的,这很好。如果您想使用一个空函数,则无需每次都创建一个新函数,因为已经存在一个。我想它不会影响调用它的任何开销。
            【解决方案8】:

            如果你有一个函数可以为其他函数提供函数,它会很有用。

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

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                猜你喜欢
                • 2010-10-30
                • 2020-08-07
                • 2020-02-02
                • 2012-05-01
                • 2012-05-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多