Ich habe den folgenden Code und erhalte die Fehlermeldung 'Duplicate Declaration query_url'.
switch(condition) {
case 'complex':
const query_url = `something`;
break;
default:
const query_url = `something`;
break;
}
Ich verstehe, dass query_url zweimal deklariert wird, was nicht richtig ist. Aber ich weiß nicht, wie ich das lösen soll. Kann mir bitte jemand helfen, wie dies richtig funktionieren soll?
javascript
ecmascript-6
Asanas
quelle
quelle
query_url
?query_url
außerhalb derswitch
Anweisung verwenden müssen, können Sie nicht verwendenconst
.Antworten:
Wenn Sie jeweils dieselbe Variable neu deklarieren müssen, lesen Sie die Antwort von @Bergi unten
Wenn
query_url
je nach Switch-Zweig mehrere Werte vorliegen können, benötigen Sie offensichtlich eine Variable (entweder mitvar
oder deklarierenlet
).const wird einmal gesetzt und bleibt so.
Beispiel Verwendung mit let
let query_url = ''; switch(condition) { case 'complex': query_url = `something`; break; default: query_url = `something`; break; }
quelle
query_url
an eine andere Funktion übergeben wurde. In diesem Fall spielt es keine Rolle, dassquery_url
es sich um einen Blockbereich handelt, da es sich lediglich um einen Zwischenwert handelt. Sie sind unangemessen hart.Versuchen Sie, die Fälle in Blöcke zu verpacken:
switch(condition) { case 'complex': { const query_url = `something`; … // do something break; } default: { const query_url = `something`; … // do something else break; } }
quelle
query_url
auf den Block, in dem er definiert ist. Welche Art von Niederlage besiegt den gesamten Zweck der Zuweisung?switch
nur a verwenden, um einen einzelnen Wert auszuwählen. Eine Objekt- (oderMap
) Suche ist für diese Aufgabe besser geeignet.case
als Block. Danke für diesen Hinweis!Ich persönlich bevorzuge (und neige dazu, dies zu missbrauchen) in solchen Fällen:
const query_url = (()=> { switch(condition) case 'complex': return 'something'; default : return 'something-else'; })();
(Dies erfordert jedoch ES6 oder die Deklaration von "use-strict" in Node 4.x)
Update: Alternativ viel kompakter, je nachdem, ob es eine Logik gibt oder ob es sich um eine einfache Aufgabe handelt:
const query_url = {complex : 'something'}[condition] || 'something-else';
Dies hängt natürlich auch von der Menge an externer Logik ab, die in diesen switch-Anweisungen eingebettet ist!
quelle
const query_url={ complex:'something complex', other:'other thing' }[condition]
Der Nachteil ist, dass Sie mit dem Objekt keine Standardeinstellung haben können. Sie müssen zusätzlich die Bedingung überprüfen.
quelle
Sie können verwenden,
{}
um Ihren Schalterfall zu erfassen.Für Ihren Fall müssen Sie die Variable zurückgeben, solange die Variable vorhanden ist und zwischen geschweiften Klammern verfügbar ist:
switch(condition) { case 'complex': { const query_url = `something`; return query_url; } default: { const query_url = `something`; return query_url; } }
Wenn Sie nicht verwenden
return
, müssen Sie einelet query_url
über Ihrer switch-Anweisung deklarieren .quelle
Fügen Sie einfach
switch
eine Funktion mit einigen return-Anweisungen ein:var condition; function aSwitch(condition){ switch(condition) { case 'complex': return 'something'; default: return 'something'; } } const query_url = aSwitch(condition);
quelle
"use strict";
einige seltsame Dinge mit Ihrem Code auftreten. Jede return-Anweisung erstellt / verknüpft eine globale Variablenabfrage-URL.