我知道如果您这样做,可以避免与使用 $
符号的其他库发生冲突。
(function($) {
// jQuery code
})(jQuery)
有人可以向我解释一下吗?
答案 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}}的唯一值是”参见“,绑定到$
,确保函数持续时间没有冲突。