【问题标题】:jQuery use of functions [duplicate]jQuery函数的使用[重复]
【发布时间】:2013-08-17 10:31:51
【问题描述】:

我对 jQuery 及其功能不是很熟悉。 有谁知道这些声明在做什么? (顺便说一句。他们包装了整个 .js 内容)

(function ($) { 'use strict' ... })(jQuery);

(function () { 'use strict' ... })();

我猜第二个是匿名函数的声明,不让内部的变量可以从外部访问。

我知道在加载 DOM 时会调用一个 ready 函数。

$(function () { 'use strict' ... });

虽然我不知道前两个函数是做什么的。

【问题讨论】:

  • (function() { ... }())function foo() {...}; (foo)() 相同。

标签: javascript jquery


【解决方案1】:

它们是自调用函数,保护范围。

注意参数 (jQuery) 在第一个函数中是如何被接受为 $ 的。通过这种方式,您可以在任何地方使用短语法,同时仍然在非冲突模式下运行。

【讨论】:

  • 非常感谢,我想我终于明白了。因此,如果我使用这样的全局变量: var app = {};我把自调用函数放在下面: (function(){ app.myString = ""; })();变量 myString 在脚本加载后立即放入应用程序中,我可以在任何我想要的地方访问它......对吗?
【解决方案2】:
(function ($) { 'use strict' ... })(jQuery);

这将使$ 仅在自调用匿名函数的范围内可用,这意味着$ 不会污染全局范围,它将确保$jQuery。如果有其他框架设置自己的$(如原型),则在函数闭包内$ 将是jQuery,因为jQuery 是传入的参数,将在函数内命名为$ . JavaScript 中的局部作用域变量优先于父作用域。

(function () { 'use strict' ... })();

这是一个充当闭包的自调用匿名函数,通常将变量保持在本地范围内,而不会将它们泄漏到全局范围内。

【讨论】:

    【解决方案3】:
    (function ($) { 'use strict' ... })(jQuery);
    

    这个用于确保代码中的 $ 是 jQuery。可能存在其他库或代码 $ 被覆盖的情况。但是这段代码确保 $ 是函数范围内的 jQuery。

    因此,这两种情况下的函数代码都用于确定功能范围。

    【讨论】:

      【解决方案4】:
      (function ($) { ... })(jQuery);
      

      你可以认为这条语句分成两部分,(function ($) { ... })是创建一个匿名函数,(jQuery)是调用匿名函数,这个类似

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

      其他一些库也将使用$(如Zepto),因此将jQuery传递给参数$可以确定$引用jQuery,并且这个匿名函数可以创建一个安全的声明的范围。

      对于'use strict',您可以阅读更多信息:What does “use strict” do in JavaScript, and what is the reasoning behind it?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 2015-03-22
        • 2013-01-28
        相关资源
        最近更新 更多