Проверяет понимание области видимости переменных в JavaScript и причин появления блочных объявлений let и const в ES6.
До ES6 в JavaScript был только один способ объявить переменную — var. Он работает в функциональной области видимости: переменная, объявленная внутри блока if или for, «протекает» наружу и становится доступной во всей функции. Это часто приводило к трудноуловимым багам, особенно в циклах с асинхронными колбэками.
undefined до присваивания.for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0); // 3, 3, 3
}
console.log(i); // 3 — переменная утекла из блока
let и const ограничены ближайшим блоком { }. Они тоже всплывают, но попадают в temporal dead zone (TDZ): обращение к ним до строки объявления бросает ReferenceError. Повторное объявление в той же области видимости запрещено.
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0); // 0, 1, 2
}
// console.log(i); // ReferenceError
let позволяет переприсваивать значение, const — нет. Но const фиксирует только привязку, а не содержимое объекта: свойства объекта или элементы массива можно менять.
const user = { name: 'Ann' };
user.name = 'Bob'; // OK
// user = {}; // TypeError
let count = 1;
count = 2; // OK
const: это сигнал, что ссылка не будет меняться.let — когда значение действительно переприсваивается (счётчики, аккумуляторы).var — только для поддержки очень старого кода; в новом коде не нужен.Итог: let и const дают предсказуемую блочную область видимости и защищают от случайных переопределений, поэтому в современном коде стоит использовать const по умолчанию и let при необходимости переприсваивания.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию