Na początku myślałem, że Zepto zdefiniował zmienną globalną „Zepto” tylko wtedy, gdy $ nie było dostępne. Zdecydowałem się więc na te testy:
Second Fiddle - Zepto + jQuery
Źródło
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
Kod jest taki sam w obu przypadkach, jedyną zmianą jest używana struktura.
Jak widać w pierwszym skrzypce, Zeptoinicjuje obie zmienne, $ AND Zepto. Czy to nie jest (Zdefiniuj dwie identyczne zmienne globalne) zła praktyka? Byłby sposób na zdefiniowanie globalnej Zepto tylko, gdyby $ $ nie było dostępne?
Odpowiedzi:
2 dla odpowiedzi № 1Od zeptojs.com:
„Zepto ustawi $ globalny tylko na siebie, jeśli nie jest jeszcze zdefiniowany. Nie ma metody Zepto.noConflict. ”
Zależy to więc od kolejności włączenia tych bibliotek. Jeśli jQuery jest włączone jako pierwsze, Zepto nie zastąpi globalnego $
. Jeśli Zepto jest uwzględnione jako pierwsze, możesz użyć jQuery.noConflict robić $
wskaż Zepto.
I nie, to nie jest zła praktyka - $
jest krótkim i łatwym aliasem, a biblioteka ma również swoją pełną nazwę globalną. BTW Mam nadzieję, że jest to pytanie czysto teoretyczne - dlaczego miałbyś zamieścić obie biblioteki na jednej stronie?;)
$
jest mniej wiarygodne niż nazwa własna biblioteki (jak udowodniono w twoim pytaniu). Wiele bibliotek może próbować ustawić wartość globalną $
podczas gdy jest mniej prawdopodobne, że taka zmienna jQuery
lub Zepto
zostanie przypadkowo nadpisany.
Aby mieć pewność, co się dzieje $
możesz użyć tego wzoru:
(function($){
$("selector").doSomething();
}(library));
gdzie library
jest inną oprócz globalnej zmienną $
chcesz się odwoływać (Zepto lub jQuery).