2013-01-04 37 views
2

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

,这是什么呢?

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

当jQuery加载而不是文档'准备好'时加载吗?

+0

我的问题是,这些jQuery的范围内的组合,所以我不相信这是一个重复。人们会专门寻找这个。 – Archonic

+0

重新打开。这个问题是特定于jQuery,并没有提到感叹号。仔细阅读后会发现感叹号是一个红色的鲱鱼,而提问者正在寻找外部函数中使用的jQuery参数的解释。 – gilly3

+0

我知道参考window.jQuery,并认为答案是现货。 – Archonic

回答

3

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

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

唯一关注的一点,就是在你的例子不同的是,在文档,功能,包装在括号中,而在这个例子中,你已经给了它是由一个!

!之前是not运营商,但实际上并没有用于任何事情;我认为它只是在那里,而不是括号来保存单个字符的代码。如果你想缩小JavaScript的话可能会有帮助。

8

它创建其中可变$被分配的window.jQuery值的封闭件。

的意图是允许uninformatively命名变量$用作一个快捷方式jQuery而不与大量的其他的库和也使用$作为变量名自定义函数的冲突。

+5

我通常做'(function(a,b){}(p1,p2))',我猜'!函数(a,b){}(p1,p2)'只是更少的字符。 –

+0

我认为问题也适用于功能主体 –

+0

之前的'!'+1 - 我更喜欢括号的可读性。 – Fenton

4

使用!该功能之前,操作导致它被作为一种表达

!function() {}() 
+0

我并没有完全明白被视为表达式的意思,但其他人认为它会立即执行代码。 – Archonic

+1

!使函数成为一个表达式,但仍不会调用该函数。在这个例子中,我们通过在最后加入()来调用函数。 ()比!更高的优先级。 –

0

不太清楚治疗,但我想这是有点相当于(function(){})()方法,它是关于JS关闭。它确保$jQuery是相同的东西

0

的 '!'是一个'不'操作符。它在代码中没有做任何事情。它存在的唯一原因是表示函数将立即执行。

您还可以看到包裹在括号中,而不是功能。

(function() {}()); 

无论使用的是个人喜好。

相关问题