2015-08-28 7 views
9

Ich habe manchmal bemerkt, dass eine Javascript-Fehler andere nicht verwandte Javascript-Funktionalität zu brechen und manchmal nicht. Ich konnte kein Muster darin sehen und dies macht das Debugging schwierig (besonders wenn Sie ein altes Projekt übernehmen und keine Zeit haben, alle Fehler zu beheben).Wann bricht ein JavaScript-Fehler den Rest des Codes?

Zum Beispiel dieser Code:

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

anbrach diesen Code:

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

wenn es keine .div-one Element auf der Seite. Es hat einen nicht definierten Fehler zurückgegeben. also habe ich es in eine if-Anweisung eingepackt, die auf die Länge von .div-one überprüft, und jetzt funktioniert der Code einwandfrei.

Aber offensichtlich gibt es viele Fälle, wenn Javascripts Fehler nichts brechen.

Wann wird JS Fehler Probleme verursachen? Die 2 Teile des Codes waren in der gleichen Datei. Vielleicht betrifft es nur die gleiche Datei?

Danke!

+2

Welchen Fehler haben Sie beim Aufruf von '$ .slick()'? – Justinas

+0

Keine vollständige Antwort, da ich keine Zeit habe, dies zu unterstützen, aber meiner Erfahrung nach ist sie linear, möglicherweise innerhalb eines bestimmten Bereichs. Wenn Zeile 47 einen Fehler hat, wird Zeile 50 beeinflusst ... – yochannah

Antwort

10

JavaScript unterscheidet sich nicht von anderen Sprachen mit Ausnahmen in dieser Hinsicht.

Wenn Sie:

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

... und doThat lösen eine Ausnahme, den Code, nachdem sie (doSomethingElse, in diesem Fall) werden nie (in allen Sprachen mit Ausnahmen, einschließlich JavaScript) laufen.

Also, wenn Sie haben:

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

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

... und der Aufruf von slick löst eine Ausnahme, die Click-Handler unten wird es nie angeschlossen werden, weil dieser Code nicht ausgeführt.

Wenn dagegen slick keine Ausnahme, aber später werfen, wenn Sie verwenden, was die Slick-Funktionalität ist und es scheitert, die nicht den Click-Handler auswirken wird, weil das Scheitern den Klick nicht daran hinderte Handler von sich zu hängen.

Wie bei anderen Sprachen mit Ausnahmen können Sie die Auswirkungen von Ausnahmen steuern; im Fall von JavaScript (und einige andere), tun Sie das mit try/catch (und finally optional) Blöcke, z.B .:

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 
} 

Es wird eine Ausnahme slick Aufruf nicht die Click-Handler nicht verhindern, angeschlossen von zu werden.

+1

Sie haben immer eine Art zu rocken! :) –

1

Dies liegt daran, dass der Autor des $ .fn.slick-Plugins nicht für leere Ergebnisse berücksichtigt hat, die von jQuery verkettet API übergeben wurden.

Es ist durchaus möglich, dass der Autor eine Ausnahme ausgelöst hat. Auf diese Weise kann ein Entwickler schnell benachrichtigt werden, warum sich das Plugin nicht so verhält, wie es sollte.

darüber nachdenkt, was passiert, wenn Sie einen falschen Selektor übergeben:

$ ("div-one") statt $ (".div-one")

Würdest du es vorziehen, dass es stillschweigend versagt, indem du nichts tust, oder lieber (brutal) durch einen Stopp in Ausführung von allem, was folgt, benachrichtigt werden?

+0

in der Tat, würde das spätere bevorzugen, schade, es wird nicht so viel verwendet. –

Verwandte Themen