JSLint beschwert sich über meinen Versuch / Fang

8

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?

    
Alex Wayne 17.11.2010, 19:39
quelle

5 Antworten

9

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:

%Vor%

Also, zum Schluss, dies ist einfach eine Einschränkung von JSLint und wird wahrscheinlich zu keinem praktischen Problem führen.

    
PleaseStand 17.11.2010, 21:49
quelle
0

Versuchen Sie, eine andere Variable zu verwenden, vielleicht wird sie dadurch verwirrt, weil e normalerweise für Ereignishandler reserviert ist.

    
Darren 17.11.2010 21:41
quelle
0

Die JSLint, die ich verwende , zeigt überhaupt keinen Fehler - und logisch, dass Ihr Code korrekt ist.

    
pex 17.11.2010 21:40
quelle
0

Verwenden Sie für jeden Versuch / Fang eine andere Variable.

    
RussellUresti 17.11.2010 21:51
quelle
0

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.

    
casablanca 17.11.2010 21:58
quelle