wake-up-neo.com

Was machen die geschweiften Klammern in switch6 after case in es6?

Was ist der Unterschied zwischen:

switch (expression) {
    case:
      somethings;
      break;
}

und

switch (expression) {
    case: {
      somethings;
      break;
    }
}

Zuerst dachte ich, dass ich ein Objektliteral so zurückgeben könnte, aber es stellt sich heraus, dass es ein Syntaxfehler ist. Was ist eigentlich der Unterschied?

Beispiel aus einer anderen Frage: Wie übergeben Sie die switch-Anweisung als Funktionsargument in Javascript ES6?

12
Aurimas

Auf diese Weise verwendete geschweifte Klammern bilden einen eigenen Blockbereich, in dem Sie lokale Variablen let oder const definieren können:

switch (false) {
    case true: {
      let x = "bar";
      console.log(x);
      break;
    }

    case false: {
      let x = "baz";
      console.log(x);
      break;
    }
}

Das Beispiel würde ohne geschachtelte Blockbereiche werfen, da mehrere let/const-Deklarationen mit demselben Bezeichner in Ecmascript 2015 nicht innerhalb desselben Bereichs zulässig sind.

Bitte beachten Sie, dass die switch-Anweisung selbst einen Blockbereich erstellt, d. H. Ob Sie verschachtelte Blockbereiche verwenden oder nicht. let/const-Deklarationen in switch gehen nicht in den übergeordneten Bereich über.

Im Zusammenhang mit switch werden geschweifte Klammern jedoch auch rein dekorativ verwendet, um die Blöcke der einzelnen case-Äste optisch hervorzuheben.

36
user6445533

sie müssen geschweifte Klammern verwenden:

  1. beim Erstellen von more -Blockbereichsvariablen (constlet) mit _/demselben Namen
    • gemäß Spezifikation MDN-Webdokumente
    • FEHLER: Nicht abgerufener SyntaxError: Bezeichner 'Variablenname' wurde bereits deklariert
  2. bei Verwendung von eslint in den Standardeinstellungen und bei Verwendung von sogar einzeln (const/let)
    • gemäß der Regel keine Fallerklärungen
    • FEHLER: Unerwartete lexikalische Deklaration im Fall, dass keine Case-Deklarationen verwendet werden