【问题标题】:What exactly does !function ($){...}(window.jQuery) do?!function ($){...}(window.jQuery) 到底是做什么的?
【发布时间】:2012-12-19 02:54:31
【问题描述】:

我想确切地知道这里发生了什么。我知道$(document).ready(function() {...}); 做什么以及何时生效。 jQuery(function($) {...} 也是如此。

但这有什么作用呢?

!function ($) {
  $(function(){
    var $window = $(window)
    //normal jquery stuff
  })
}(window.jQuery)

它是在加载 jQuery 时而不是在文档“就绪”时加载的吗?

【问题讨论】:

  • 我的问题是 jquery 上下文中这些问题的组合,所以我不相信它是重复的。人们会专门寻找这个。
  • 重新打开。这个问题是针对 jQuery 的,没有提到感叹号。仔细阅读会发现感叹号是一条红鲱鱼,提问者正在寻找外部函数中使用的 jQuery 参数的解释。
  • 我知道参考 window.jQuery 并认为答案是正确的。

标签: javascript jquery


【解决方案1】:

它创建一个闭包,其中变量$ 被赋值为window.jQuery

其目的是允许将无信息命名的变量 $ 用作 jQuery 的快捷方式,而不会与也使用 $ 作为变量名的大量其他库和自定义函数发生冲突。

【讨论】:

  • 我通常使用(function(a,b){}(p1, p2)),我猜!function(a,b){}(p1,p2) 只是字符较少。
  • 我认为问题也适用于函数体之前的!
  • 为了完成答案,开头的! 是一些程序员用来表示立即调用该函数的约定。您也可以使用+。在这种情况下,它不会影响代码的运行方式(如果您将函数分配给变量或对其执行任何其他操作,它会影响将返回值转换为布尔值的效果)。
  • 这就是为什么我的页面标题中的$ is undefined 错误消失了:) 很棒的答案伙计们!
  • @iblamefish - 您的评论听起来好像! 是可选的,可以安全地省略。 ! 将函数 declaration 转换为函数 expression。没有它,您将收到运行时错误。我认为您的观点是,有不止一种方法可以做到这一点,这当然是正确的。但是,如果说它只是一个“不影响代码运行方式”的“约定”,可能会令人困惑。
【解决方案2】:

使用 !函数之前的运算符导致它被视为表达式

!function () {}()

【讨论】:

  • 我没有完全理解被视为表达式的含义,但其他人说它会立即执行代码。
  • !使函数成为表达式,但仍然不调用该函数。在示例中,我们通过在末尾添加 () 来调用函数。 () 的优先级高于 !。
【解决方案3】:

您正在查看的语法用于设置 jQuery 闭包。这用于确保 jQuery $ 变量在代码中可用且正确;即它不能在全局范围内被其他任何东西覆盖(如果您使用多个库等,这是可能的)。

jQuery 插件作者经常使用这种技术——如果您有兴趣了解更多信息,请访问docs are here,并更详细地解释为什么要将 jQuery 代码包装在这样的函数中。

您的示例中唯一不同的是,在文档中,该函数被括在括号中,而在您给出的示例中,它前面是 !

! 是一个not 运算符,但实际上并没有用于任何用途;我认为它就在那里而不是括号来保存单个代码字符。如果您喜欢缩小 javascript,可能会有所帮助。

【讨论】:

    【解决方案4】:

    不太确定,但我想这有点相当于(function(){})() 方法,它是关于 js 闭包的。它确保$jQuery 是同一件事

    【讨论】:

      【解决方案5】:

      “!”是一个“非”运​​算符。它在代码中没有做任何事情。它存在的唯一原因是表示该函数将立即执行。

      您可能还会看到用括号括起来的函数。

      (function() {}());
      

      使用什么都是个人喜好。

      【讨论】:

        猜你喜欢
        • 2012-06-09
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2015-08-06
        • 2013-09-02
        • 2014-01-02
        • 2013-10-10
        相关资源
        最近更新 更多