2013-03-28 81 views
0

为了防止冲突的prototype.js使用jQuery我裹在下面的代码片段我的jQuery代码:自执行函数参数

(function($) { 

})(jQuery); 

如果我理解这一点correnctly,$ === jQuery将是真实的我的函数中。但是在这种情况下,实际的“参数”jQuery,它在我的函数里面获得别名$

如果我的假设是正确的,是否需要在两个地方都通过jQuery才能称之为jQuery,还是可以在函数结束时传递它?

+0

'$'是参数名称,变量'jQuery'(可以是任何表达式)是您作为参数传入的内容。 – Bergi

+0

@Bergi谢谢,这就是我需要的:) – Johan

回答

3

在您的IIFE中,您可以使用$jQuery - 它们都在范围内。

只有(jQuery)实际上是被传递作为参数 - 所述$仅仅是功能参数(因此别名为jQuery)。

一看就知道,你的代码是几乎等同于:

var f = function($) { 
    ... 
}; 

f(jQuery); 

除了你IIFE是一个匿名函数。

+0

谢谢,只是我正在寻找的解释 – Johan

1

如果我很明白这一点,$ === jQuery将在我的函数内成立。但是,在这种情况下,实际的“参数”jQuery中,我的函数中获取别名$?

是。 $是参数名称,变量jQuery是您作为参数传入的参数 - 它可以是任何表达式。

如果我的假设是正确的,我需要通过jQuery的两个地方,以调用它的jQuery,或者这将是确定,只是通过它在函数的结束?

是的,您需要重命名该参数。只有它没有多大意义,因为您可以参考全局jQuery变量,然后(除非您打算覆盖该变量,例如使用不同的jQuery版本) - $别名仅为简洁起见。如果您想避免与Prototype混淆,请改为使用jQ

+0

谢谢。后续问题:如果我想从外部访问闭包内的东西,我是否必须首先从闭合内部“返回”它? – Johan

+0

是的,无论是“返回”还是将其分配给可从外部访问的内容(例如全局变量)。 – Bergi

0

在闭包中,只有$可靠引用jQuery库;更具体地说,是当时的库版本。

当以后加载另一个版本的库时,只有$仍然指向您所期望的; jQuery符号将被后一版本所取代。

如果您希望在函数内部使用jQuery别名,则需要在函数参数中将$重命名为jQuery