0

Есть следующая конструкция:

switch(val) {
    case '1':
        let sign = bar
        return ...
    case '2':
        let sign = foo
        return ...
}

При срабатывании этого кода вылетает ошибка

SyntaxError: Identifier 'sign' has already been declared

Почему? Что, если я не хочу, чтобы переменная sign создавалась в каждом кейсе?

  • в кейсах можно просто фигурные скобки использовать или всетаки обьявить переменную 1н раз для всех – Rostyslav Kuzmovych Mar 10 '19 at 01:10

1 Answers1

6

Директива let позволяет объявить локальную переменную с областью видимости, ограниченной текущим блоком кода (MDN)

Блок инструкций (или сложная инструкция в других языках) используется для группировки нуля или более инструкций. Блок отделяется парой фигурных скобок (MDN)

function fn(val) {
  switch (val) {
    case '1':
      {
        let sign = 'bar';
        return sign;
      }
    case '2':
      {
        let sign = 'foo';
        return sign;
      }
  }
}
console.log(fn('2'));

function fn2(val) { let sign; switch (val) { case '1': sign = 'bar'; return sign; case '2': sign = 'foo'; return sign; } } console.log(fn2('1'));

  • В комментарии под вопросом, Вы всё правильно сказали. Дополните пожалуйста ответ вариантом с одним объявлением. – UModeL Mar 10 '19 at 05:01