首先,我坚信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。

不,这不是一个坏习惯-$是简短易懂的别名,而该库也具有全名。顺便说一句,我希望这纯粹是理论上的问题-为什么将两个库都放在一页上? ;)

$的可靠性不及库本身的名称(已由您的问题证明)。许多库可能会尝试设置全局$,而像jQueryZepto这样的变量不太可能被意外覆盖。

为了确定$后面的内容,您可以使用以下模式:

(function($){
   $('selector').doSomething();
}(library));


其中,library是除要引用的$之外的另一个全局变量(Zepto或jQuery)。

关于javascript - Zeptojs和$(全局变量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18879078/

10-09 17:38