/ / Zeptojs i $ (Global Variables) - javascript, jquery, zepto

Zeptojs i $ (Global Variables) - javascript, jquery, zepto

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:

First Fiddle - Pure Zepto

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 № 1

Od 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).