首先,我认为如果$不可用,Zepto只定义了一个“Zepto”全局变量。所以,我决定进行这些测试:
Second Fiddle - Zepto + jQuery
来源
HTML
<div id="first-global">
</div>
<div id="second-global">
</div>
JS
var first = document.getElementById('first-global'),
second = document.getElementById('second-global');
first.innerHTML = $;
second.innerHTML = Zepto
两者的代码是相同的,只有改变的是使用的框架。
所以,正如你在第一个小提琴中看到的那样,Zepto初始化两个变量$ AND Zepto。这不是(定义两个相同的全局变量)一个坏习惯吗?有一种方法可以定义Zepto全球只有IF $不可用吗?
答案 0 :(得分:2)
来自zeptojs.com:
“如果尚未定义,Zepto将仅将$ global设置为自身。 没有Zepto.noConflict方法。“
所以它取决于包含这些库的顺序。如果首先包含jQuery,那么Zepto将不会覆盖全局$
。如果首先包含Zepto,那么您可以使用jQuery.noConflict使$
指向Zepto。
不,这不是一个不好的做法 - $
是简短的别名,而图书馆的全名也是全球性的。顺便说一下,我希望这是纯粹的理论问题 - 为什么你会在一个页面上包含两个库? ;)
$
不如图书馆自己的名字可靠(正如您的问题所证明的那样)。许多图书馆可能会尝试设置全局$
,而jQuery
或Zepto
等变量不太可能被意外覆盖。
要确定$
背后的内容,您可以使用此模式:
(function($){
$('selector').doSomething();
}(library));
其中library
是除了$
之外的另一个全局变量(Zepto或jQuery)。