代码之家  ›  专栏  ›  技术社区  ›  Nathan MacInnes

jQuery的名称空间是如何工作的?[副本]

  •  0
  • Nathan MacInnes  · 技术社区  · 14 年前

    可能重复:
    What does this JavaScript/jQuery syntax mean?

    我是说当你这样做的时候:

    (function ($) {
      ...
    })(jQuery);
    

    我以前从没见过这种语法。如何调用函数?我明白当你这样做的时候:

    jQuery(function ($) {
      ...
    });
    

    因为函数正在传递给jQuery,jQuery可以在DOM准备好时运行作为参数传递的任何函数,但第一个函数不同。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Community CDub    8 年前

    副本 What does this JavaScript/jQuery syntax mean?

    我将在这里发布我的答案,尽管杰夫•艾特伍德似乎希望我们接受复制:( http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/ )


    编写插件时使用此约定,以确保不与使用$符号的其他Javascript库冲突,同时确保插件作者仍可以使用此符号:

    (function($){
        ...
    })(jQuery); 
    

    作者用一个参数($)声明一个匿名函数,然后立即调用它并将jQuery对象传递给它。这样可以确保调用函数并定义函数中的所有内容。

    更长的符号可能是:

    function MyDefs($){
        ...
    }
    MyDefs(jQuery);
    

    尽管这会在全局命名空间中创建一个变量MyDefs。匿名函数模式使全局命名空间为空,从而避免冲突。

        2
  •  1
  •   Victor Nicollet    14 年前

    这是一个匿名函数。当你写作时:

    (function ($){
      ..
    })(jQuery);
    

    主要相当于:

    function the_function($) {
      ..
    }
    
    the_function(jQuery);
    

    唯一的区别是第一个不创建名为 the_function 因此,不存在意外地改写具有该名称的现有函数或变量的风险。当然,所有这些都相当于:

    function the_function() {
      var $ = jQuery;
      ..
    }
    
    the_function();
    

    这个结构的要点是 _函数 是本地的,因此不能意外覆盖全局范围内的任何变量或函数。例如,函数内部的代码使用 $ 代表 jQuery 对象,但这将与使用 $ 还有(比如原型)。通过包装 $ 在函数内部,函数外部的原型代码不受影响。