问答详情
源自:1-8 jQuery多库共存处理

还是不懂怎么把$交出去的。。

Var _jQuery = window.jQuery,
    _$ = window.$;

jQuery.noConflict = function( deep ) {
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }
if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }
    return jQuery;
};

看了半天还是没懂怎么实现把$交出去的。。完全没理解。。。望大神解答具体的流程。。

提问者:YouNoFish 2015-08-23 00:27

个回答

  • qq_珍稀_0
    2016-04-30 11:28:18

    之前的_$和_jQuery是没有内容的

  • hnull
    2016-01-23 19:48:08

    var
    	// Map over jQuery in case of overwrite
    	_jQuery = window.jQuery,
    
    	// Map over the $ in case of overwrite
    	_$ = window.$;
    	
    // 这边是说保存jQuery和$以防被重写覆盖了,这些代码是jq引入时自执行的,
    // 此时的window.jQuery或window.$都很有可能是undefined,如果引入jq之前没有其他库使用了$和jQuery,
    // $.noConfilct()这种用法就是 将引入jq之前的window.$ 赋值给window.$,乍看很奇怪,其实就是
    // 通过 上面的_$ = window.$先保存, 然后$.noConfilct()里面, window.$ = _$, 此时就完成了
    // jq库放弃window.$的使用权,  此时window.$是什么呢, 在引入jq之前, $是什么,现在就是什么,
    // 比如undefined 或者是prototype.js中的$
    
    // 同理如果$.noConfilct(true) 那么jq库也放弃了window.jQuery的使用权
    
    jQuery.noConflict = function( deep ) {
    	if ( window.$ === jQuery ) {
    		window.$ = _$;
    	}
    
    	if ( deep && window.jQuery === jQuery ) {
    		window.jQuery = _jQuery;
    	}
    
    	return jQuery;
    };


  • 慕设计3243925
    2015-10-16 23:40:09

    我也不是很理解,这段代码应该是把$ 和jQuery保存到未定义的_$和——jQuery中,然后判断是否已经解析完function后,如果执行noConfilct就把那个undefined的东东穿给$

  • YouNoFish
    2015-08-23 00:30:40

    汗。。再看了看又理解了。。脑子没转过来 哈哈哈