2015-08-28 12 views
9

Ho notato che un errore javascript interromperà altre funzionalità javascript non correlate e talvolta no. Non riuscivo a vedere uno schema e questo rende difficile il debug (specialmente quando si prende un vecchio progetto e non si ha il tempo di correggere tutti gli errori).Quando un errore javascript interrompe il resto del codice?

Per esempio questo codice:

$(".div-one").slick({ // settings for slick plugin }); 

stava rompendo questo codice:

$('.product-options').click(function() { 
    $('.message').slideToggle('show'); 
}); 

quando non c'era nessun elemento .div-one sulla pagina. Ha riaccordato un errore non definito dell'elemento. così l'ho avvolto in un'istruzione if che controlla la lunghezza di .div-one e ora il codice funziona correttamente.

Ma ovviamente ci sono molti casi in cui l'errore di javascript non infrange nulla.

Quindi quando l'errore js può causare problemi? I 2 pezzi di codice erano nello stesso file. Forse riguarda solo lo stesso file?

Grazie!

+2

Quale errore si genera quando si chiama '$ .slick()'? – Justinas

+0

Non è una risposta completa in quanto non ho tempo per eseguire il backup, ma nella mia esperienza tende ad essere lineare, possibilmente entro un determinato ambito. Se la riga 47 ha avuto un errore, la riga 50 sarà interessata ... – yochannah

risposta

10

JavaScript non è diverso dalle altre lingue con eccezioni a questo proposito.

Se si dispone di:

doThis(); 
doThat(); 
doSomethingElse(); 

... e doThat genera un'eccezione, il codice dopo che (doSomethingElse, in questo caso) non viene mai eseguito (in tutte le lingue con le eccezioni, tra cui JavaScript).

Quindi, se si dispone di:

$(".div-one").slick({ /* settings for slick plugin */ }); 

$('.product-options').click(function() { 
    $('.message').slideToggle('show'); 
}); 

... e la chiamata a slick genera un'eccezione, il gestore clicca qui sotto che non sarà mai collegato, perché il codice non viene eseguito.

Al contrario, se slicknon gettare un'eccezione, ma più tardi, quando si utilizza qualunque sia la funzionalità chiazza di petrolio è e non funziona, che non influenzerà il gestore clic, perché il fallimento non ha impedito il clic gestore di essere agganciato.

Come con altre lingue con eccezioni, è possibile controllare l'impatto delle eccezioni; nel caso di JavaScript (e molti altri), lo si fa con try/catch (e facoltativamente finally) blocchi, per es .:

try { 
    $(".div-one").slick({ /* settings for slick plugin */ }); 
} catch (e) { 
    // Some appropriate handling of the exception 
} 
try { 
    $('.product-options').click(function() { 
     $('.message').slideToggle('show'); 
    }); 
} catch (e) { 
    // Some appropriate handling of the exception 
} 

C'è un'eccezione chiamando slick non impedisce al gestore di clic di essere collegato.

+1

Hai sempre un modo di dondolare! :) –

1

Questo perché l'autore del plugin $ .fn.slick non ha tenuto conto del set di risultati vuoto passato da jQuery API di concatenamento.

È possibile che l'autore abbia scelto di lanciare un'eccezione. In questo modo, uno sviluppatore può essere rapidamente informato del motivo per cui il plug-in non si comporta come dovrebbe.

Pensateci, che cosa accadrà se hai superato un selettore non corretta:

$ ("div-uno") invece di $ (".div-one")

Preferiresti che fallisse silenziosamente senza fare nulla, o preferirebbe essere informato (brutalmente) da una fermata nell'esecuzione di tutto ciò che segue?

+0

anzi, preferirei quello successivo, peccato che non sia usato tanto. –

Problemi correlati