在网上看到关于noConflict的解释,好多人估计一眼就看出来了,所以写的很简略,而我总感觉被绕在里面。然后看到一个人写的蛮详细的,也挺容易理解的,但是越看越不对,虽然详细,但是好像理解有点误。
涉及到noConflict函数的主要有下面这些代码:
var _jQuery = window.jQuery,
_$ = window.$;
jQuery.noConflict = function( deep ) {
if ( window.$ === jQuery ) {
window.$ = _$;
}
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
};
if ( !noGlobal ) {
window.jQuery = window.$ = jQuery;
}
举个例子:
<script type="text/javascript">
var $ = "abc1";
</script>
<script type="text/javascript" src="jquery-3.2.1.js"></script>
<script type="text/javascript">
var jq = jQuery.noConflict();
console.log($); //这里输出的是 abc1
</script>
在var $= "abc1"的时候 window.$ = "abc1",所以当加载到jquery文件的时候,有一个_$ = window.$ ,
此时_$="abc1",window.$=jQuery;
此时$和jQuery均指向jQuery,而值“abc1”被存储在jquery中的_$中,所以当调用noConflict函数的时候判断window.$ ===jQuery 的时候是相等的,再把_$的值就是"abc1"重新赋值给$,此时window.$的值就变为了“abc1”。