代码之家  ›  专栏  ›  技术社区  ›  TK.

理解jquery插件的框架

  •  3
  • TK.  · 技术社区  · 15 年前

    AT a website ,我找到了以下代码来制作jquery插件:

    (function($){
      // Our code here...
    })(jQuery);
    

    我不明白上面的代码是如何工作的。我的理解是,代码会立即执行,因为 () 在里面 function(){}() . 所以整个代码都说这是一个立即运行的匿名函数。

    但我不明白为什么包装需要通过 jQuery 里面需要 $ 通过。

    据我所知, $ 是的别名 JQuery ,意思几乎相同。什么意思 $ JQuery 在这里?作为jquery插件,整个代码是如何工作的?

    4 回复  |  直到 12 年前
        1
  •  3
  •   Anurag    15 年前

    jquery是实际的参数。$是形式参数。你可以写:

    (function(ForAFewDollarsLess){
        ForAFewDollarsLess('#myId') ...
    })(jQuery);
    

    一个原因是方便-它很短。您可能在noconflict模式下将jquery与其他库一起使用。也许打字 jQuery 所有的时间都是一个麻烦,或者其他插件正在遵循坏的实践和使用 $ 而不是 JQuery . 不管是哪种方式,您都可以使用像上面这样的自调用函数来解决问题。

        2
  •  0
  •   Sarfraz    15 年前

    你把化名传过去 $ 在函数中,以便它始终实际引用jquery。如果某个页面中包含一些其他库,例如prototype,它也使用 $ ,您的代码不会被破坏,并且可以正常工作。

        3
  •  0
  •   gnarf    15 年前

    为了最大限度地与其他库兼容,jquery还提供了 .noConflict() . 这将删除 $ 全局命名空间中的别名,以便其他库可以在需要时使用它。

    如果你不想让你的插件和 .noconflict() 没必要。

    使用闭包还可以不污染“全局范围” var

        4
  •  0
  •   Sean    12 年前

    gnarf提出了vars的全球范围污染,我也会添加一些功能。

    您可能需要使用帮助函数,如:

    (function($){
      // Our code here...
      $.fn.myPluginFunction = function () {
        ...
        var x = foobalizeTheFrobmaster(this.offset())
        ...
      }
    
      function foobalizeTheFrobmaster(pos) {
        // do something useful
        return something;
      }
    })(jQuery);
    

    这样内部功能 foobalizeTheFrobmaster() 完全隐藏在我们的封闭中。