Quelle est la différence entre:
switch (expression) {
case:
somethings;
break;
}
et
switch (expression) {
case: {
somethings;
break;
}
}
Au début, je pensais pouvoir renvoyer un objet littéral comme ceci, mais il s'avère que c'est une erreur de syntaxe. Quelle est la différence en réalité?
Exemple tiré d'une autre question: Comment passer l'instruction switch en tant qu'argument de fonction dans Javascript ES6?
Les accolades utilisées de cette manière établissent leur propre portée de bloc, dans laquelle vous pouvez définir des variables let
ou des constantes const
locales:
switch (false) {
case true: {
let x = "bar";
console.log(x);
break;
}
case false: {
let x = "baz";
console.log(x);
break;
}
}
L'exemple jetterait sans portées de bloc imbriquées, car plusieurs déclarations let
/const
portant le même identifiant ne sont pas autorisées dans la même portée dans Ecmascript 2015.
Veuillez noter que l’instruction switch
crée une portée de bloc elle-même, c’est-à-dire que vous utilisiez des portées de bloc imbriquées ou non, les déclarations let
/const
à l'intérieur de switch
ne fuient pas dans la portée parent.
Toutefois, dans le contexte de switch
, les accolades sont également utilisées à des fins purement décoratives, afin de mettre en évidence visuellement les blocs de chaque branche case
.
vous devez utiliser des accolades:
const
let
) avec _/même nomconst
/let
)