【问题标题】:How do jQuery's namespaces work? [duplicate]jQuery 的命名空间是如何工作的? [复制]
【发布时间】:2010-11-26 13:17:15
【问题描述】:

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

我的意思是当你这样做时:

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

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

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

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

【问题讨论】:

标签: javascript jquery syntax


【解决方案1】:

What does this JavaScript/jQuery syntax mean? 的副本

我将在此处发布我的答案,尽管 Jeff Attwood 似乎希望我们接受重复:(https://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】:

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

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

大致相当于:

function the_function($) {
  ..
}

the_function(jQuery);

唯一的区别是第一个不会创建一个名为the_function 的函数,因此不会产生意外覆盖具有该名称的现有函数或变量的风险。当然,这一切都等价于:

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

the_function();

这个结构的要点是在the_function 中定义的任何变量都是本地的,因此不会意外覆盖全局范围内的任何变量或函数。例如,函数内部的代码使用$ 来表示jQuery 对象,但这会与也使用$ 的其他库(例如Prototype)发生冲突。通过将$ 的用法封装在函数内部,函数外部的Prototype 代码不受影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 2017-05-01
    • 2016-03-13
    • 2012-07-13
    • 2013-02-12
    • 2012-02-10
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多