В чем разница между var, const и let в JavaScript
Что проверяют
Знаете ли вы про область видимости, всплытие и временную мёртвую зону. Вопрос базовый, поэтому ценится точность формулировок, а не общий смысл.
Как отвечать
Три отличия: область видимости, повторное объявление и поведение до инициализации.
| var | let | const | |
|---|---|---|---|
| Область видимости | функция | блок | блок |
| Повторное объявление | можно | нельзя | нельзя |
| Переприсваивание | можно | можно | нельзя |
| До объявления | undefined | ошибка | ошибка |
var всплывает и инициализируется значением undefined, поэтому обращение до объявления не падает. let и const тоже всплывают, но остаются недоступны до строки объявления: это и есть временная мёртвая зона.
console.log(a); // undefined
var a = 1;
console.log(b); // ReferenceError
let b = 1;Блочная область видимости решает классическую задачу с циклом: var создаёт одну переменную на весь цикл, let свою на каждую итерацию.
Где спотыкаются
Говорят, что const создаёт неизменяемое значение. Он запрещает переприсваивание ссылки, а содержимое объекта или массива менять можно: const arr = []; arr.push(1) работает.
Не знают термина «временная мёртвая зона» и говорят, что let не всплывает. Всплывает, просто недоступен.
Забывают, что var в глобальной области создаёт свойство объекта window, а let и const нет.