Чем отличаются var, let и const
Вопрос
Чем отличаются var, let и const? Что из них вы используете и почему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`var` с функциональной областью, `let` и `const` с блочной
`var` поднимается с `undefined`, `let`/`const` попадают в TDZ
`var` можно объявить повторно, `let`/`const` нет
`const` запрещает переприсваивание, но не изменение объекта
`var` на верхнем уровне скрипта становится свойством `window`
По умолчанию `const`, `let` для изменяемых, `var` не использую
Что могут спросить следом
- Как сделать объект действительно неизменяемым?
- Почему
letв циклеforведёт себя иначе, чемvar? - Поднимается ли
let?
Разбор
Образцовый ответ: «Главное отличие в области видимости: var видна во всей функции, а let и const только внутри блока, например внутри if или тела цикла. Второе: подъём. Все три объявления регистрируются заранее, но var сразу получает undefined, а let и const до своей строки в временной мёртвой зоне, и обращение к ним бросает ReferenceError. Третье: var можно объявить повторно, let и const нет, это ошибка разбора. const запрещает переприсвоить переменную, но объект внутри менять можно; для неизменяемости есть Object.freeze, и то поверхностный. Ещё var на верхнем уровне скрипта становится свойством window. В цикле for с let на каждой итерации создаётся новая привязка, поэтому колбэки видят разные значения. Я пишу const по умолчанию, let когда значение реально меняется, а var не использую совсем: его поведение источник багов».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.