Javascript-Bereich variable switch case?
In C Sie können den Gültigkeitsbereich einer Variablen zu einem switch case, wie diese.
Mit javascript bekomme ich unexpected token mit den folgenden:
JS:
const i = 1
switch (i) {
//variables scoped to switch
var s
var x = 2342
case 0:
s = 1 + x
break
case 1:
s = 'b'
break
}
Gibt es eine andere Möglichkeit, dies zu tun oder soll ich einfach erklären, meine Variablen außerhalb der switch?
EDIT:
Dies ist ein workaround als ich, aber es hat nicht bis Ende arbeiten. Der Grund dafür ist, dass jeder Fall hat seinen eigenen Bereich.
JS:
const i = 1
switch (i) {
case i:
//variables scoped to switch
var s
var x = 2342
case 0:
s = 1 + x
break
case 1:
s = 'b'
break
}
- Ihre
switch
- Anweisung ist ungültigJS
zumindest. Sie können bei der Definition von Variablen innerhalb des Fällen oder außerhalb wechseln. - Da klar auf den Sie zugreifen möchten
s
nach, außerhalb derswitch
, warum sind Sie versuchen zu Umfang es innerhalb derswitch
Aussage...?! - dies ist nur ein Beispiel es gibt viele Gründe, warum jemand wollen würde, dies zu tun.
- Siehe meine aktualisierte Antwort für einen workaround, der dir das gibt was du suchst.
- vielleicht gibt es nicht viele Gründe, dies zu tun. Ich war eigentlich nur versuchen, machen someones code übergeben jslint (var deklarierte mehrfach, einmal für jeden Fall), ohne deren Geltungsbereich zu ändern. Rückblickend ist es wahrscheinlich besser, einfach den Bereich ändern oder ignorieren, anstatt dass der code schwerer zu verstehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
var
erzeugt Variablen auf Funktion Umfang jedenfalls, es zu benutzen ist ziemlich sinnlos. Für dieses arbeiten auf einer Granularität unterhalb der Funktion Bereiche, die Sie verwenden müssenlet
und einen browser/compiler die es unterstützt, und stellen Sie dann einen neuen block, die Sie kann Umfang Dinge (innerhalbswitch
es ist einfach Syntaxfehler):Diese Bereiche
s
zu denif
block, der für alle Absichten und Zwecke identisch ist mit der "switch
Rahmen" hier.Wenn Sie nicht unterstützen
let
, benötigen Sie eine IIFE:if
überhaupt. Nur wickeln Sie den code in{}
.if
- Anweisung. Sicher, Sie können es versuchen, ohne das.if
nicht verwechselt werden, für ein Objekt-literal, rund um den gesamten block würde nicht entweder.einige alternativen:
oder
Nein, das ist ungültige syntax. Ein
case
oderdefault
Erklärung soll binnenswitch
. Sie können überprüfen, dass die Spezifikation hier: http://www.ecma-international.org/ecma-262/5.1/#sec-12.11Können Sie auch versuchen Sie, Ihren code in einer JSLinter und sehen, dass das ein Fehler: http://jslint.com/
Die Problemumgehung, die Sie erwägen, wäre die gleiche Sache wie setzen Sie Sie außerhalb der switch-Anweisung. Denken Sie daran,
var
hat Funktion-level-Bereich, nicht block-level-Bereich. Das bedeutet, dass Sie gebunden sind, um die gesamte Funktion mit dem Schalter. Sie müssen erklären, Sie Sie außerhalb der Schalter, weil das ist, wo Sie zugänglich sind.Es sollte deklariert werden, die außerhalb der Schalter. Der unten könnte helfen:
JavaScript definiert in 3 Stufen Bereich:
var
Stichwort{}
) mitlet
So, zu creae ein Bereich für eine ganze Konstrukt, haben Sie zwei Wahlmöglichkeiten: - Funktion oder Block
JS:
JS: