2009-06-23 13 views
10

Szukałem w jQuery kodu UI i uważam, że każdy plik zaczyna się od konstrukcji jak ta:Jakie są konsekwencje tego fragmentu javascript?

;jQuery.ui || (function($) { 

Moje pytanie brzmi: dlaczego jest średnik przed jQuery i dlaczego jest logiczną OR robione ?

jrh

+0

Pierwsze z twoich pytań jest duplikatem [Co robi wiodący średnik w bibliotekach JavaScript?] (Http://stackoverflow.com/q/1873983/1048572) – Bergi

+0

lub na odwrót? Pytanie, które łączysz, jest kilka miesięcy nowsze od tego .. – jrharshath

+0

Pytanie, które złączyłem, jest kanoniczne na ten temat, z lepszymi odpowiedziami, dlatego je połączyłem. – Bergi

Odpowiedz

21

dlaczego jest średnik przed jQuery?

Średnik służy do zapewnienia bezpiecznego łączenia plików. (biblioteki i komponenty biblioteki są często pakowane w jeden plik)

dlaczego logiczne OR jest wykonywane?

Funkcja anonimowego wywoływania z prawej strony działa tylko wtedy, gdy lewa strona instrukcji jest wartościowana. Jeśli więc na stronie istnieje już , funkcja nie zostanie uruchomiona.Działa tylko wtedy, gdy jeszcze nie istnieje jQuery.ui.

+2

hehe, "falsey", miło. To niesamowity sposób na opisanie wartości, która jest fałszywa, podoba mi się. –

+1

Nie mój termin ... Myślę, że słyszałem to w wideo Douga Crockforda. – James

1

W języku angielskim, że linia kodu mówi: albo jQuery.ui istnieje, lub zdefiniować tę funkcję ...

Np jeśli jQuery.ui nie jest zdefiniowany, wówczas funkcja zostanie utworzona.

Początkowy średnik nie powinien wywoływać żadnego efektu - ogranicza jedynie koniec instrukcji kodu.

1

Wydaje mi się, że logiczne OR zostało zrobione, aby umożliwić wielokrotne dołączenie pliku (i jego ocenę), a nie samego clobbera: jeśli załadujesz go ponownie, jQuery.ui będzie już zdefiniowane i nie będzie Zrób cokolwiek.

Przez przypadek plik może zostać wielokrotnie uwzględniony, jeśli ktoś utracił znaczniki skryptu.

Jeśli chodzi o średnik, mogę tylko zgadywać, że jest to zabezpieczenie, aby upewnić się, że plik działa również, jeśli jest zawarty w innym pliku, nawet jeśli ostatnia instrukcja nie jest zakończona średnikiem.

Nieprawdopodobny średnik nie szkodzi, brakujący średnik może.

6

Zgaduję, że ; jest zapewnienie, że pakowarki javascript nie zepsuć linii, ale to najlepsze, jakie mam.

Logiczne lub istnieje, aby upewnić się, że jQuery.ui nie zostanie zgłoszone dwukrotnie. JavaScript ma zwarcie, więc nie oceni strony po prawej stronie ||, jeśli lewa strona ocenia coś, co jest truthey(dzięki JP!).

Odczytanie składni bonusowej, że $ przekazane do anonimowej funkcji jest odniesieniem do jQuery. Musiałem przejść całą drogę w dół strony, że przed jednym kliknięciu :-)

Więc oto podziale wersja linii powyżej

;    // extra semi colon to ensure correct concatenation and minifying 
jQuery.ui  // check if the variable called jQuery.ui is truthey 
||    // OR if jQuery.ui isn't defined 
(function($) {...})(jQuery); // define and execute an anonymous function 
          // passing in the conflict safe jQuery 
          // as the parameter called $ 
Powiązane problemy