Das Javascript, wenn es durch JSLint läuft, schreit mich an und ich bin nicht sicher warum.
%Vor%Es sagt mir:
Problem bei Zeile 12 Zeichen 11: 'e' ist bereits definiert.
} catch(e) {
Es scheint verärgert zu sein, dass ich eine zweite catch(e)
habe. Warum sollte das ein Problem sein? Wird e nicht einfach auf die lokale Variable im Catch-Block gesetzt? Muss ich die lokalen Variablen für alle gefangenen Fehler in einer Funktion eindeutig benennen?
Für JSLint hat try..catch
den impliziten Effekt, e
als lokale Variable zu deklarieren. Da Sie zwei solche Blöcke innerhalb der gleichen Funktion haben (es gibt keinen Blockbereich in JavaScript), sieht JSLint das als deklariert eine Variable, die bereits deklariert wurde .
Durch die Benennung der Variablen e1
, e2
, usw. würde diese Warnung von JSLint verhindert. Ist das wirklich ein Problem? Die ECMAScript 5-Spezifikation, Abschnitt 12.14, sagt: "Egal wie die Kontrolle den Block verlässt, die LexicalEnvironment wird immer in ihren früheren Zustand zurückversetzt." Dies scheint tatsächlich der Fall zu sein:
Also, zum Schluss, dies ist einfach eine
Die JSLint, die ich verwende , zeigt überhaupt keinen Fehler - und logisch, dass Ihr Code korrekt ist.
JSLint könnte hier einfach falsch liegen. Gemäß der ECMAScript-Spezifikation erstellt die Eingabe eines catch
-Blocks einen neuen Bereich, in dem die Ausnahmevariable definiert ist. In Ihrem Beispiel ist e
nur innerhalb des Blocks catch
gültig und nicht außerhalb definiert. Hier gibt es keine Neudefinition.
Tags und Links javascript exception-handling jslint error-handling try-catch