Встречается на 26% собеседований по JavaScript
Чем let отличается от var
Ключевые слова let и var используются для объявления переменных в JavaScript, но имеют важные различия в области видимости, поднятии (hoisting) и поведении в глобальном контексте. Основное отличие: var имеет функциональную область видимости, а let — блочную, что делает let более предсказуемым и предпочтительным в современном коде.
Область видимости
var: переменная, объявленная черезvar, доступна во всей функции, где она объявлена, независимо от вложенных блоков (например,if,for). Если объявитьvarвне функции, она становится глобальной переменной.let: переменная, объявленная черезlet, доступна только внутри блока{ ... }, где она объявлена. Блоком может быть тело цикла, условного оператора или просто фигурные скобки.
Пример:
javascript
if (true) {
var varVariable = "Я доступен везде в функции";
let letVariable = "Я доступен только в этом блоке";
}
console.log(varVariable); // Работает, потому что var имеет функциональную область видимости
console.log(letVariable); // Ошибка, потому что let имеет блочную область видимости
text
## Поднятие (Hoisting) и временная мертвая зона
- **`var`**: объявления переменных поднимаются в начало функции или скрипта. Это значит, что переменная существует до строки с её объявлением, но до инициализации её значение равно `undefined`.
- **`let`**: также поднимается, но не инициализируется. Доступ к переменной до её объявления вызывает `ReferenceError`. Этот период называется "временная мертвая зона" (Temporal Dead Zone, TDZ).
Пример:
```javascript
console.log(a); // undefined из-за поднятия
var a = 3;
console.log(b); // ReferenceError из-за временной мертвой зоны
let b = 4;Глобальный контекст
var: в глобальной области видимости переменные, объявленные черезvar, становятся свойствами глобального объекта (windowв браузерах). Это может привести к конфликтам имён и нежелательному загрязнению глобального пространства.let: в глобальной области видимости переменные, объявленные черезlet, не добавляются к глобальному объекту, что снижает риск конфликтов.
Когда использовать
let— предпочтительный выбор для большинства случаев, так как обеспечивает строгую блочную видимость и уменьшает вероятность ошибок, связанных с неожиданным доступом к переменным.var— может использоваться, когда нужна функциональная область видимости, но в современном JavaScript его применение ограничено из-за потенциальных проблем с областью видимости и поднятием.- Для констант используйте
const, которое также имеет блочную область видимости и запрещает переприсваивание.
Коротко
varимеет функциональную область видимости,let— блочную.varподнимается с инициализациейundefined,let— без инициализации (TDZ).- В глобальном контексте
varсоздаёт свойства глобального объекта,let— нет. - В современном коде предпочтительны
letиconstвместоvar.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
