Can jQuery';s$会干扰其他图书馆吗?
我了解到,如果这样做,可以避免与使用Can jQuery';s$会干扰其他图书馆吗?,jquery,javascript,javascript-framework,Jquery,Javascript,Javascript Framework,我了解到,如果这样做,可以避免与使用$符号的其他库发生冲突 (function($) { // jQuery code })(jQuery) 有人能给我解释一下吗?您使用名为$的参数定义了一个匿名函数。然后立即使用jQuery对象调用它(其名称很可能非常明确,不会与其他库对象的名称冲突) 因此,在匿名函数的范围内(所有jQuery代码都将在其中),$将引用jQuery对象。因此,每个人都很高兴:您的代码可以使用方便的速记$,以后的代码可以将$用于自己的业务。其他库可以将$用于其他目的
$
符号的其他库发生冲突
(function($) {
// jQuery code
})(jQuery)
有人能给我解释一下吗?您使用名为
$
的参数定义了一个匿名函数。然后立即使用jQuery
对象调用它(其名称很可能非常明确,不会与其他库对象的名称冲突)
因此,在匿名函数的范围内(所有jQuery代码都将在其中),
$
将引用jQuery
对象。因此,每个人都很高兴:您的代码可以使用方便的速记$
,以后的代码可以将$
用于自己的业务。其他库可以将$
用于其他目的
你还是应该打电话
jQuery.noConflict();
您可以在这里阅读更多内容:
$
表示jQuery对象。其他库也使用$
来表示它们的对象。因此,如果加载jQuery插件,它可能会尝试更改错误的$
对象
您可以使用
jQuery.noConflict()
来规避此问题:是的,使用$
可能会干扰其他库(例如Prototype)
您的代码段定义了一个立即函数,然后调用它,并将jQuery
作为参数传递。(jQuery
是jQuery的顶级对象,当没有冲突时,$
也是如此。)
jQuery
绑定到函数的$
参数。JavaScript函数创建自己的作用域,因此函数参数(和局部变量,用var
声明)将“覆盖”具有相同名称的任何全局变量
函数将“查看”的$
的唯一值是绑定到jQuery
的参数,确保函数期间没有冲突。您还必须使用
通常,当您使用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
});