$与jQuery

Jam*_*ead 68 jquery

我们正在从工作中从MooTools切换到jQuery.我有一个同事告诉我$在使用jQuery方法时永远不要用作前缀(如果我理解他的话).他说,相反,更合适或更安全的方式(我没有真正跟随他)就是使用jQuery..

因此$.plugin(),jQuery.plugin()应该使用,而不是,例如.

那为什么会这样?他用$/ 做出了什么区别jQuery?我应该忘记美元符号作为我的访问者吗?只在某些情况下?

Raf*_*ael 83

那为什么会这样?他的$/jQuery区别是否正确?

因为几乎每个JavaScript库都定义了一个名为$的函数.如果一个文档中有许多库,则可能会出现冲突.如果你确定jQuery是并且永远是唯一定义该函数的脚本,我就不会有任何反对使用$.

jQuery定义了一个解决冲突的好方法:jQuery.noConflict.通过使用此函数,您可以定义自己的名称,从而可以访问jQuery,例如

var $jq = jQuery.noConflict(true);
Run Code Online (Sandbox Code Playgroud)

调用此函数将导致在初始化jQuery之前存在时恢复$和jQuery变量的先前值.我不记得是否有其他库试图解决名称冲突.

如果你想使用$而不是jQuery,你可以在一个单独的私有作用域中运行你的代码,该作用域通过使用自调用函数来保存$的定义.

(function($){
   // your code goes here
   $("body").append("<p>Hello World!</p>");
})(jQuery); // or even jQuery.noConflict()
Run Code Online (Sandbox Code Playgroud)

  • 只是为了挑剔术语:你所呈现的不是一个闭包,而只是一个自我调用的功能.闭包是指在另一个函数内部定义函数并返回它时. (10认同)
  • IIFE的+1(立即调用的函数表达式).IMO这比使用'noConflict`更可取,因为范围已明确定义. (2认同)

Mat*_*cey 11

$是别名的jquery,理论上可以别名于另一个包含的库或脚本中的其他东西,这可能会导致混乱或更糟.如果你只使用jquery,使用$应该没问题.


Oma*_*bid 5

这是为了避免与使用相同 $ 的其他库(如 Prototype)发生冲突。

我更喜欢 $,如果您只使用 Jquery,使用它没有问题。


Dez*_*zza 5

除了与其他库冲突的其他答案之外,变量名应始终描述变量.jQuery对于变量而言,它是一个更具描述性的名称$.