避免命名空间冲突

除了 jQuery 之外的库也可以使用 $ 作为别名。这可能会导致这些库和 jQuery 之间的干扰。

要发布 $ 以与其他库一起使用:

jQuery.noConflict();

调用此函数后,$ 不再是 jQuery 的别名。但是,你仍然可以使用变量 jQuery 本身来访问 jQuery 函数:

jQuery('#hello').text('Hello, World!');

或者,你可以将另一个变量指定为 jQuery 的别名:

var jqy = jQuery.noConflict();
jqy('#hello').text('Hello, World!');

相反,为了防止其他库干扰 jQuery,你可以将 jQuery 代码包装在一个立即调用的函数表达式(IIFE)中 ,并将 jQuery 作为参数传递:

(function($) {
    $(document).ready(function() {
        $('#hello').text('Hello, World!');
    });
})(jQuery);

在这个 IIFE 中,$ 只是 jQuery 的别名。

另一种保护 jQuery 的 $ 别名并确保 DOM 准备就绪的简单方法 :

jQuery(function( $ ) { // DOM is ready
   // You're now free to use $ alias
   $('#hello').text('Hello, World!');
});

总结一下,

  • jQuery.noConflict()$ 不再指 jQuery,而变量 jQuery 指的是。
  • var jQuery2 = jQuery.noConflict() - $ 不再指 jQuery,而变量 jQuery 指的是变量 jQuery2

现在,存在第三种情况 - 如果我们希望 jQuery 仅在 jQuery2可用**,该怎么办**?使用,

var jQuery2 = jQuery.noConflict(true)

这导致 $jQuery 都没有引用 jQuery。

当多个版本的 jQuery 要加载到同一页面上时,这很有用。

<script src='https://code.jquery.com/jquery-1.12.4.min.js'></script>
<script>
    var jQuery1 = jQuery.noConflict(true);
</script>
<script src='https://code.jquery.com/jquery-3.1.0.min.js'></script>
<script>
    // Here, jQuery1 refers to jQuery 1.12.4 while, $ and jQuery refers to jQuery 3.1.0.
</script>

https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/