What do the curly braces do in switch statement af

2020-03-01 03:04发布

What's the difference between:

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

and

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

At first I thought that I could return an object literal like so, but it turns out it's a syntax error. What's the difference actually?

Example from another question: How to pass switch statement as function argument in Javascript ES6?

2条回答
太酷不给撩
2楼-- · 2020-03-01 03:49

you have to use curly brackets:

  1. when creating more block scoped variables (const / let) with the same name
    • according to spec MDN web docs
    • ERROR: Uncaught SyntaxError: Identifier 'variablename' has already been declared
  2. when using eslint in default settings and using even single one (const / let)
    • according to rule no-case-declarations
    • ERROR: Unexpected lexical declaration in case block no-case-declarations
查看更多
做个烂人
3楼-- · 2020-03-01 03:59

Curly braces used in this way establish their own block scope, in which you can define local let variables or const constants:

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

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

The example would throw without nested block scopes, since multiple let/const declarations with the same identifier are not allowed within the same scope in Ecmascript 2015.

Please note that the switch statement creates a block scope itself, i.e. whether you use nested block scopes or not, let/const declarations inside switch don't leak into the parent scope.

However, in the context of switch, curly brackets are also used purely decorative, to visually highlight the blocks of the individual case branches.

查看更多
登录 后发表回答