jQuery的$可以干扰其他库吗?

时间:2011-10-26 01:18:23

标签: jquery javascript javascript-framework

我知道如果您这样做,可以避免与使用 $ 符号的其他库发生冲突。

(function($) {
  // jQuery code  
})(jQuery)

有人可以向我解释一下吗?

5 个答案:

答案 0 :(得分:4)

使用名为$的参数定义匿名函数。然后立即使用jQuery对象(其名称可能非常明确,不会与其他库对象的名称冲突)立即调用它。

因此,在匿名函数(所有jQuery代码都是)的范围内,$将引用jQuery对象。因此,每个人都很高兴:您的代码可以使用方便的简写$,稍后的代码可以使用$进行自己的业务。

答案 1 :(得分:1)

其他图书馆可能会将$用于其他目的。

你仍然应该打电话

jQuery.noConflict();

您可以在此处阅读更多内容:http://api.jquery.com/jQuery.noConflict/

答案 2 :(得分:1)

您还必须使用jQuery.noconflict

通常,当您使用jQuery时,它会定义一个名为$的全局函数。 jQuery还会记住$之前的值 - 就像另一个库定义的全局$函数一样。

当您调用noconflict时,jQuery将恢复之前(记住的)$值。但是现在你不能使用$来使用jQuery - 你只能使用函数名jQuery,但这更详细。这就是你在问题中提到的代码的用武之地。

该代码允许您使用$在您定义的匿名函数的范围内调用jQuery,而不必替换全局$的值。函数为其局部变量和参数创建单独的范围或命名空间。您发布的代码等同于:

function init() {
    var $ = window.jQuery;
    // do stuff with $
}
init();

将初始化函数注册为在DOM准备就绪时调用的回调的常用快捷方式是将其作为参数传递给$

$(function() {
    // code
});

为了避免在需要防止库冲突时嵌套两个匿名函数,jQuery函数会将自身作为参数传递给此回调,因此您可以这样做:

jQuery(function($) {
    // $ is jQuery here
});

答案 3 :(得分:0)

$表示jQuery对象。其他库也使用$来表示其对象。因此,如果您加载jQuery插件,它可以尝试更改错误的$对象。

您可以使用jQuery.noConflict()来规避此问题:http://api.jquery.com/jQuery.noConflict/

答案 4 :(得分:0)

是的,使用$会干扰其他库(例如Prototype)。

您的代码段定义了一个立即函数,然后调用它,并将jQuery作为参数传递。 (jQuery是jQuery的顶级对象,当没有冲突时为$。)

jQuery绑定到函数的$参数。 JavaScript函数创建自己的作用域,因此函数参数(以及用var声明的本地化)将“覆盖”任何具有相同名称的全局变量。

函数“{1}}的唯一值是”参见“,绑定到$,确保函数持续时间没有冲突。