4

假设我正在运行一个没有冲突的 jQuery 版本,如下所示:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript">var jQuery191 = $.noConflict(true);</script>

我有一个外部 .js 文件,它应该使用无冲突版本运行,并在脚本底部jQuery191包含 jQuery 对象。(jQuery)

如果我包含 .js 文件getScript()并使用无冲突的 jQuery 对象运行它:

(function (jQuery) {
    $.getScript("js.js");
})(window.jQuery191)

脚本将与原始脚本一起运行jQuery191还是与原始脚本一起运行jQuery?或者这个逻辑只是愚蠢的。

4

2 回答 2

2

getScript只会加载脚本并将其添加到页面中,它根本不会影响脚本的行为。如果脚本通过它的全局名称访问 jQuery,那么它将找不到它(由于noConflict被调用),并且将无法正确运行。

如果可以的话,我建议在调用之前noConflict包含脚本,否则你将不得不修改脚本以在你放置它的地方寻找 jQuery ( jQuery191)。

于 2013-03-08T22:36:22.537 回答
0

在您的包装器 ( (function() { ... })()) 中,您将变量定义为全局范围内jQuery的变量副本。jQuery191

这意味着$.getScript不使用该变量,但调用jQuery.getScript有效。因为它是一个匿名函数,$所以包装器内部现在引用外部$变量(在这种情况下,$是全局对象中的)。您可以通过将包装器的第一个参数重命名为$

(function ($) {
    $.getScript('foo.js');
})(window.jQuery191);

或者通过在你的包装器中添加这个:

var $ = jQuery

现在,两者都$包含全局范围jQuery的变量的副本。jQuery191

于 2013-03-08T22:35:46.263 回答