【问题标题】:!function ($) { }(window.jQuery) what is this code for? [duplicate]!function ($) { }(window.jQuery) 这段代码是干什么用的? [复制]
【发布时间】:2012-12-07 20:45:00
【问题描述】:

可能重复:
What is the purpose of this? (function ($) { //function code here })(jQuery);
What does the exclamation mark do before the function?
negating self invoking function? !function ($) { … }(window.jQuery);

!function ($) {
     $(function() {
            .
            .
            .
    })
}(window.jQuery)

我在一个 jquery 示例中看到了这一点,我想知道 !function($){}(window.jQuery) 是干什么用的。特别是感叹号对我来说是新的。

【问题讨论】:

  • 所以您在 StackOverflow 上找到了答案,并觉得有必要将您在 StackOverflow 上找到答案的事实作为单独的问题和答案发布?
  • 它不完全是重复的。这个结合了 jQuery 和 !符号为一个答案。另外,不是每个人都知道 !function($){}() 和 (function($){})() 基本上是在做同样的事情。直到我输入感叹号才找到答案。有些人只会尝试查找 !function 并没有为我找到任何结果。
  • @IHateLazy 从好的方面来说,我去给原始答案一些代表...
  • @Stofke:有无数种不同问题的组合可以组合在一起形成一个“新”问题。这些已被多次询问和回答。它们是两个不同的问题,正如您所展示的那样,它们都已涵盖。所以是的,它是重复的。
  • 值得称赞的是,您自己找到了答案。但这应该表明已经可以找到答案。我敢打赌,有 数百 个问题以各种形式询问有关此函数语法的问题。 jQuery 被传递的事实没有任何区别。每次有人向函数传递不同的值时,我们是否应该提出一个新问题?

标签: javascript jquery


【解决方案1】:

好吧,我在做一些研究后想通了,但我会把答案留给其他人。

基本上是为了避免与也使用美元符号的其他 javascript 库发生冲突

所以 Jquery 建议使用 jQuery 或 window.jQuery 而不是美元符号。它通常与 jQuery.noConflict() 结合使用,以使 jQuery 在您混合库时放弃其他 javascript 库中使用的 $ 符号。

这实际上是一种运行自执行函数的方法,它传入 window.jQuery对象并传递它到 $ 符号。这样您就可以在代码中继续使用美元符号,而不必担心其他可能导致与您的代码发生冲突的 JavaScript 库。

将它包装在这个函数中可以避免在任何地方使用 window.jQuery 来替换 $ 符号。

如果您像这样execute function () {}() 会导致语法错误,因为它只是一个函数声明。 !把它变成一个可以执行的表达式。

所以基本上你可以将两者用于相同的目的。

!function($){}()
(function($){})()

随意修改或补充。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 2012-12-19
    • 2012-03-14
    • 1970-01-01
    • 2014-01-05
    • 2011-08-26
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多