2011-05-11 12 views
10

Udawajmy, że jest to <head> twojej strony html.

OOPS to było trochę, że zaginął przed ...:

<script type="text/javascript" src="/include/js/billys.js"></script> 
<script type="text/javascript" src="/include/js/susies.js"></script> 
<script type="text/javascript" src="/include/js/marys.js"></script> 

Zamówienie z 3 skrypty mogą się różnić. Jaki byłby wynik?

Billy określa $ jak

function $() { 
return false; 
} 

Susie definiuje $ jak

function $() { 
return document.getElementById('body'); 
} 

Mary definiuje $ jak

function $() { 
alert('I wrote this'); 
} 
+0

Niestety, zobacz teraz pytanie. Rozmawiam z zewnętrznymi plikami js. Gwoli ścisłości. –

+0

jak powiedziałem w mojej odpowiedzi. cokolwiek jest ostatnie, to definicja '$' – Neal

Odpowiedz

18

Cokolwiek jest ostatni jest th e ostateczna definicja $

Dlatego w (na przykład) jQuery jest noConflict() który pozwala na korzystanie z inną zmienną niż $ dla jQuery

+0

Czyli ZAWSZE [ZAWSZE], z góry na dół, a cokolwiek jest ostatnie, to czego użyje? –

+0

@ Co masz na myśli? – Neal

+0

Potwierdzam, że mówisz, że kolejność skryptów jest naprawdę ważna. –

5

Ostatnia funkcja o tej samej nazwie wygrywa.

+2

To trochę tak, jak cena jest właściwa. –

16

Why not try it?

function $() { 
return false; 
} 
function $() { 
return document.getElementById('body'); 
} 
function $() { 
alert('I wrote this'); 
} 
$(); // alerts "I wrote this" 

Późniejsza definicja nadpisuje istniejący. Dlatego na ogół dobrą praktyką jest sprawdzenie, czy funkcja już istnieje przed jej zdefiniowaniem. na przykład

if (typeof $ !== 'function') { 
    function $(){ /* your code */} 
} 

lub zawieść w jakiś rozsądny sposób.

+1

Jeśli ta funkcja istnieje, zastąp ją pustą funkcją? Myślę, że musisz trochę zmienić swój ostatni przykład. – Ryan

+0

@minitech Um, tak, '! ==' jest to, co miałem na myśli. Komentarz dodano dla jasności. – lonesomeday

+0

Okay, dzięki :) +1 – Ryan

Powiązane problemy