$与jQuery的区别

74
我们正在工作中从MooTools切换到jQuery。我有一个同事告诉我,当使用jQuery方法时永远不要使用$作为前缀(如果我理解他正确的话)。他说,相反,更合适或更安全的做法(我没有真正明白他)是使用jQuery.
例如,应该使用jQuery.plugin()而不是$.plugin()
为什么会这样呢?他在$/jQuery方面做了什么区别?我应该忘记美元符号作为我的访问器吗?只有在某些情况下吗?

可能是 jQuery 和 MooTools 冲突 的重复问题。 - Jim G.
可能是重复的问题:这些jQuery ready函数有什么区别? - Ciro Santilli OurBigBook.com
4个回答

87

为什么会这样?他对于 $/jQuery 的区分是正确的吗?

因为几乎所有的 JavaScript 库都定义了一个名为 $ 的函数。当你在一个文档中使用多个库时,可能会出现冲突。如果你确信 jQuery 是并且将始终是唯一定义该函数的脚本,那么我不反对使用 $。

jQuery 定义了一个很好的解决方案来解决冲突:jQuery.noConflict。通过使用这个函数,你可以定义你自己的名称,jQuery 将可以被访问,例如:

var $jq = jQuery.noConflict(true);

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

如果您想始终使用$而不是jQuery,可以通过使用自执行函数在单独的私有作用域中运行代码来保持$的定义。

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

10
仅挑刺一下术语:你提供的不是闭包,而只是一个自执行函数。闭包是当你在另一个函数内定义函数并返回它时。 - Andreas Grech
1
我的错误。在撰写答案时我不知道自己在想什么。已更改文本。 - Rafael
2
对于IIFE(立即调用函数表达式),我个人认为这是一个加分项。相比使用“noConflict”,它的作用域更加明确。 - ach
1
你不觉得在 noConflict 中传递“true”可能会在使用插件时引起问题吗?我还没有尝试过,但 jQuery 文档确实提到其他 jQuery 插件依赖于“jQuery”变量,并且在这种情况下可能无法正常运行。 - PrasadW

11

$ 被别名为 jQuery,理论上,在另一个包含的库或脚本中,$ 可能被别名为其他东西,这可能会导致混淆甚至更糟的情况。如果你只使用 jQuery,则使用 $ 应该没问题。


5
为了避免与其他使用相同 $ 符号的库(如Prototype)发生冲突,这么做是必要的。
我更喜欢使用 $ 符号,在只使用Jquery时使用它没有问题。

5
除了其他答案提到的与其他库的冲突之外,变量名应该始终描述变量。相比于$,jQuery是一个更具描述性的变量名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接