【问题标题】:Following a function with (jQuery) [duplicate]使用(jQuery)跟随一个函数[重复]
【发布时间】:2015-03-22 14:52:45
【问题描述】:

下面是一个函数的例子,后面跟着 jQuery 函数:

<script> 
    (function ($)
    {
        $('a').mouseenter(
        function () { alert(this.id); });
    })(jQuery);
</script>

我进行了大量搜索并一直在阅读jQuery Succinctly,但我真的很难理解传入$ 符号或使用(jQuery) 跟随函数的作用。谁能帮我澄清一下?

额外问题:这与扩展 jQuery 方法有什么关系吗?我正在考虑尝试扩展 .html() 方法。

【问题讨论】:

标签: javascript jquery extension-methods


【解决方案1】:

你有一个函数,它接受一个名为 $ 的参数。 然后您调用该函数并将其作为参数传递给 jQuery。 这允许您在该函数内使用 $ 作为 jQuery 的简写。无论出于何种原因,您都不能在任何地方使用 $ 简写,这很有用。

【讨论】:

    【解决方案2】:

    您将包 jQuery 作为参数传递给函数,以确保 $ 是 jQuery 的别名。

    【讨论】:

    • $ 不会是 jQuery 的别名吗?这与范围有关吗?
    • @JacobStamm 通常在 Joomla 或 Wordpress 等 CMS 中,$ 不会是 jQuery。因此,如果您不想每次都编写 jQuery,则该闭包很有用。此外,在创建插件时,您应该始终使用这样的闭包,以防开发人员使用您的插件覆盖 $
    【解决方案3】:

    该构造称为 IIFE - Immediately-Invoked Function Expression。第一组括号内的表达式的结果是一个带有一个参数的函数(名为$)。然后第二组括号立即调用传入 jQuery 对象的函数。

    这是一种用于避免污染周围(或全局)范围的常见模式。

    【讨论】:

      【解决方案4】:

      美元符号 ($) 是传递给立即调用函数表达式的 jQuery 对象的别名。它也可以很容易地成为一个不同的角色。

      这是一个小例子:

      /* 
       Here's my huge library akin to jQuery's (albeit with slightly less functionality). 
       */
      function MySuperLibrary(){
          this.foo = function(bar){alert(bar);}
      };
      var msl = new MySuperLibrary;//a new instance of My Super Library
      
      /* 
       Here I'm Immediately Invoking a function and passing the msl instance to it.
       I've used the 'X' character for its namespace within the closure in the same way as jQuery uses a $.
       */
      (function(X){
          X.foo("foobar");
      })(msl);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 2019-06-19
        相关资源
        最近更新 更多