jQuery.noConflict 方法包含一個可選的布爾參數[1],用以決定移交 $ 引用的同時是否移交 jQuery 對象自己: jquery
jQuery.noConflict([removeAll])缺省狀況下,執行 noConflict 會將變量 $ 的控制權移交給第一個產生 $ 的庫;當 removeAll 設置爲 true 時,執行 noConflict 則會將 $ 和 jQuery 對象自己的控制權所有移交給第一個產生他們的庫。
// Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$,容易理解的是,jQuery 經過兩個私有變量映射了 window 環境下的 jQuery 和 $ 兩個對象,以防止變量被強行覆蓋。一旦 noConflict 方法被調用,則經過 _jQuery, _$, jQuery, $ 四者之間的差別,來決定控制權的移交方式,具體的代碼以下:
noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }再來看上面所說的參數設定問題,若是 deep 沒有設置,_$ 覆蓋 window.$,此時 jQuery 別名 $ 失效,但 jQuery 自己完整無缺。若是有其餘類庫或代碼從新定義了 $ 變量,它的控制權就徹底交接出去了。反之若是 deep 設置爲 true 的話,_jQuery 覆蓋 window.jQuery,此時 $ 和 jQuery 都將失效。
var query = jQuery.noConflict(true); (function ($) { // 插件或其餘形式的代碼,也能夠將參數設爲 jQuery })(query);[1] http://api.jquery.com/jQuery.noConflict/#jQuery-noConflict-removeAll