Что делают фигурные скобки в инструкции switch после случая в es6?

Какая разница между:

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

и

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

Сначала мне показалось, что я могу возвращать объектный литерал так, но получается синтаксическая ошибка. Какая разница на самом деле?

Пример из другого вопроса: Как передать оператор switch в качестве аргумента функции в Javascript ES6?

Ответ 1

В фигурных скобках, используемых таким образом, устанавливается их собственная область блока, в которой вы можете определить локальные переменные let или константы const:

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

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

Ответ 2

Вы должны использовать фигурные скобки:

  1. при создании большего количества переменных области блока (const/let) с тем же именем
    • согласно спецификации MDN Web Docs
    • ОШИБКА: Uncaught SyntaxError: Идентификатор 'имя переменной' уже объявлен
  2. при использовании eslint в настройках по умолчанию и использовании даже одного (const/let)
    • согласно правилу no-case-декларации
    • ОШИБКА: неожиданное лексическое объявление в случае блока