首先,我坚信Zepto仅在$不可用的情况下才定义“ Zepto”全局变量。因此,我决定进行这些测试:
First Fiddle - Pure 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全局全局值?
最佳答案
从zeptojs.com:
“ Zepto仅在尚未定义$全局时将其设置为全局。
没有Zepto.noConflict方法。”
因此,这取决于包含这些库的顺序。如果首先包含jQuery,则Zepto不会覆盖全局$
。如果首先包含Zepto,则可以使用jQuery.noConflict指向$
指向Zepto。
不,这不是一个坏习惯-$
是简短易懂的别名,而该库也具有全名。顺便说一句,我希望这纯粹是理论上的问题-为什么将两个库都放在一页上? ;)$
的可靠性不及库本身的名称(已由您的问题证明)。许多库可能会尝试设置全局$
,而像jQuery
或Zepto
这样的变量不太可能被意外覆盖。
为了确定$
后面的内容,您可以使用以下模式:
(function($){
$('selector').doSomething();
}(library));
其中,
library
是除要引用的$
之外的另一个全局变量(Zepto或jQuery)。关于javascript - Zeptojs和$(全局变量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18879078/