2013-06-26 39 views
3

我注意到在某些地方,jQuery代码被封装在一个像下面这样的自调用函数中。为什么这样做,在什么情况下这是有用的,在什么情况下是不必要的样板?自我调用函数jQuery

function($) { 
    ... 
}(jQuery); 
+0

你不需要'''全局变量来表示'jQuery',这里有很多重复和资源。 –

+0

函数创建变量作用域。你的函数现在有一个作用域'$'。而已。 –

+0

......但是如果你的代码放在'.ready()'处理程序中,这是不必要的,因为你只需要执行'jQuery(document).ready(function($){...});'或者较短的'jQuery(function($){...});' –

回答

8

简短的回答:为了避免变量名称冲突。它并不总是需要的,但是为了创建无冲突的可重用代码是一种很好的做法。

长答案:在JavaScript中,$符号只是另一个变量。 jQuery使用它,因为它是一个很好的简写,而不必每次输入jQuery,但其他代码(包括其他库)也可以。

为了防止在同一作用域(在本例中为“全局”作用域中的变量)与其他变量的使用发生冲突,代码被包装在自调用函数中的“无冲突”作为函数参数传递的变量。然后这将创建一个新的范围,其中您的变量不会干扰该变量的其他用途。通过这种方式,您可以传递完整的命名变量&在匿名函数中使用您想要的任何名称。

因此,创建无冲突的可重用的代码时,它就是用这个方法很好的做法:

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

沿着这些线路,你也将看到以下格式:

(function($, window, undefined) { 
    ... 
})(jQuery, window); 

在这种情况下undefined仅用于提高可读性以指示不再有参数传递给该函数。

0

在功能范围$是不与任何其它全球冲突$局部变量。

3

如果你想避免关于使用$

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

在这个函数中,你可以使用$,而不必担心它的冲突是使用它外面该函数内部,$总是指jQuery目的。

这在创建jQuery插件时很有用,你会看到jQuery插件使用这种函数来避免与其他插件的冲突。

参考:http://learn.jquery.com/plugins/basic-plugin-creation/