2011-05-11 4 views
10

Facciamo finta che questo sia nello <head> della tua pagina html.

OOPS questo era un po 'che mancava prima ...:

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

Ordine dei 3 script potrebbero variare. Quale sarebbe il risultato?

Billy definisce $ come

function $() { 
return false; 
} 

Susie definisce $ come

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

Maria definisce $ come

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

Siamo spiacenti, vedere la domanda ora. Sto parlando con file js esterni. Giusto per essere chiari. –

+0

come ho detto nella mia risposta. qualunque cosa sia l'ultima, è la definizione di '$' – Neal

risposta

18

Qualunque sia ultima è esimo e definizione finale del $

Ecco perché in (per esempio) jQuery c'è noConflict() che permette di utilizzare una variabile diversa rispetto $ per jQuery

+0

Quindi è SEMPRE [SEMPRE], dall'alto verso il basso, e qual è l'ultimo è ciò che userà? –

+0

@Doug cosa intendi? – Neal

+0

Confermando che stai dicendo che l'ordine degli script è davvero tutto ciò che conta. –

5

L'ultima funzione con lo stesso nome vince.

+2

È un po 'come il prezzo è giusto. –

16

Why not try it?

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

La definizione poi sovrascrive quello esistente. Questo è il motivo per cui è generalmente buona norma verificare se una funzione esiste già prima di definirla. per esempio.

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

o fallire in qualche modo ragionevole.

+1

Se la funzione esiste, sovrascriverla con una funzione vuota? Penso che tu debba cambiare un ultimo esempio. – Ryan

+0

@minitech Um, si, '! ==' è quello che intendevo. Commento aggiunto per chiarezza. – lonesomeday

+0

Ok, grazie :) +1 – Ryan

Problemi correlati