js noConflict

132 阅读1分钟

jQuery API文档中堆noConflict方法描述:“释放jQuery对变量控制权”。在jQuery库中占用率全局变量控制权”。 在jQuery库中占用率全局变量(jQuery的别名),但不止jQuery库会使用(zeptoJSprototypejs)。当项目中同时引用了jQuery和其他占用全局变量(zeptoJS prototypejs)。当项目中同时引用了jQuery和其他占用全局变量时,可能会导致冲突。所以jQuery在给全局变量冲突。所以jQuery在给全局变量赋值的时候先保存当时全局变量已经存在的值,然后通过noConflict把原来保存的值重新赋给全局变量已经存在的值,然后通过noConflict把原来保存的值重新赋给全局变量(很有人道主义~)。 在noConflict方法中也释放了jQuery变量的控制(这个大多场景应用于引入多个jQuery版本)。 下面是源码

var 
// 保存此时全局变量jQuery的值
_jQuery = window.jQuery;
// 保存此时全局变量$
_$ = window.$;
jQuery.noConflict = function(deep){
// 当加载到jQuery时,如果此时的全局变量$还是属于现在版本的jQuery,则把全局变量$的控制权重新给之前$
if(window.$===jQuery){
window.$=_$;
}
// 如果参数deep为true,且此时的全局变量jQuery还是属于现在的jQuery,则把全局变量jQuery在当前版本jQuery初始化的值_jQuery重新赋值给jQuery
if(deep&&window.jQuery===jQuery){
window.jQuery+_jQuery;
}
return jQuery;
};
let jq = jQuery.noConflict();//把jQuery当做普通对象,noConflict是一个对象的属性
if(!noGlobal) {window.JQuery = window.$ = JQuery;}

代码可以看出jQuery库在且只在初始化的时候会保存全局变量jQuery的值,保存的值惠子调用noConflict复原,这个方法正确使用的前提是和jQuery的值,保存的值惠子调用noConflict复原,这个方法正确使用的前提是,jQuery要在jQuery引入之前就已经存在。