В чем разница между if else и switch? [дубликат]

218
03 июня 2018, 01:30

На данный вопрос уже ответили:

  • Всплывают ли переменные, объявленные с помощью let и const в ES6? 1 ответ

Заметил интересный момент, хотелось бы узнать почему так происходит.
Вот пример номер 1:

var people = { 
    1:{name:'Вася'}, 
    2:{name:'Петя'}, 
    3:{name:'Сережа'}, 
};  
let key = 1; 
if(key==1) 
{ 
    let man = people[key]; 
    console.log(man); 
} 
else if(key==2){ 
     let man = people[key]; 
     console.log(man); 
}        
else 
{ 
    let man = people[key]; 
    console.log(man); 
}

Результатом будет { name: 'Вася' } . Это правильно и хорошо, меня полностью устраивает результат.
Пример 2:

var people = { 
    1:{name:'Вася'}, 
    2:{name:'Петя'}, 
    3:{name:'Сережа'}, 
};  
let key = 1; 
switch(key) { 
    case 1: 
        let man = people[key]; 
        console.log(man); 
        break; 
    case 2: 
        let man = people[key]; 
        console.log(man); 
        break; 
    default: 
        let man = people[key]; 
        console.log(man); 
        break; 
}

Как на мой взгляд, результат должен быть тот же, не чего существенно не изменилось, но результатом будет ошибка нечто вроде - Identifier 'man' has already been declared.
Почему так?)
Я делаю предположение что разница кроется на этапе компиляции, и switch case в отличии от if else заглядывает во все свои case, и исполняет код только в нужном случае, и вот в тот момент когда заглядывает, находит ошибку в синтаксисе, так как получается что несколько let переменных объявляются друг за другом... Как то так вообщем.
Какие Ваши мысли по этому поводу?

Answer 1

Потому что, нужно создавать области действия через фугурные скобки ({}), тогда переменная man будет существовать только в пределах своей области.

Попробуйте:

var people = { 
    1:{name:'Вася'}, 
    2:{name:'Петя'}, 
    3:{name:'Сережа'}, 
};  
let key = 1; 
switch(key) { 
    case 1: { 
        let man = people[key]; 
        console.log(man); 
        break; 
    } 
    case 2: { 
        let man = people[key]; 
        console.log(man); 
        break; 
    } 
    default: { 
        let man = people[key]; 
        console.log(man); 
    } 
}

READ ALSO
Как сделать создание таблиц по клику на button? при этом пользователь сам вводит шырину и высоту таблицы, количество рядов и столбцов

Как сделать создание таблиц по клику на button? при этом пользователь сам вводит шырину и высоту таблицы, количество рядов и столбцов

нужно чтобы после нажатия на кнопку "создать таблицу", создавалась таблица со всеми настройками которые ввел пользователь

180
telegram google spreadsheets

telegram google spreadsheets

Знаете ли вы, как можно отправить ответ из Google sheets в телеграм?

236
svg, javascript:отрисовка с маской [дубликат]

svg, javascript:отрисовка с маской [дубликат]

На данный вопрос уже ответили:

194