var имеет функциональную область видимости, let и const — блочную. var можно переобъявлять и переназначать, let можно переназначать, но нельзя переобъявлять в той же области видимости, const нельзя ни переобъявлять, ни переназначать. Переменные, объявленные с помощью var, подвержены поднятию (hoisting) с инициализацией undefined, let и const подвержены поднятию, но остаются в "временной мертвой зоне" до инициализации.
javascript
Ключевые различия сведены в таблицу:
| Особенность | var | let | const |
|---|---|---|---|
| Область видимости | Функциональная | Блочная | Блочная |
| Переобъявление | Да | Нет (в той же области) | Нет |
| Переназначение | Да | Да | Нет (для примитивов) |
| Поднятие | Да (с undefined) | Да (в временной мертвой зоне) | Да (в временной мертвой зоне) |
| Начальная мутация | Не требуется инициализация | Не требуется инициализация | Требуется инициализация |
Важно отметить, что для объектов и массивов, объявленных с const, сама переменная не может быть переназначена к другому объекту/массиву, но содержимое объекта/массива может быть изменено.
javascript