2

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

但这有什么作用?

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

它是在加载 jQuery 时而不是在文档“准备好”时加载的吗?

4

5 回答 5

8

它创建了一个闭包,在该闭包中为变量$分配了 的值window.jQuery

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

于 2013-01-04T16:36:00.903 回答
4

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

!function () {}()
于 2013-01-04T16:37:49.527 回答
3

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

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

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

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

于 2013-01-04T16:38:58.903 回答
0

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

于 2013-01-04T16:38:02.427 回答
0

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

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

(function() {}());

使用什么都是个人喜好。

于 2013-01-04T16:44:38.147 回答