Вопрос с собеседования · Frontend

Чем var отличается от let и const?

JuniorОсновы JavaScript
Ещё спрашивают так:
  • Что такое hoisting и временная мёртвая зона?
Коротко

var — область видимости функции, поднимается (hoisting) со значением undefined, допускает повторное объявление. let и const — область видимости блока {}, до строки объявления — временная мёртвая зона (ReferenceError). const запрещает переприсваивание, но не изменение объекта.

  • В современном коде: const по умолчанию, let — если переменная меняется, var — не использовать
  • var в цикле с колбэками — одно значение на все итерации; let создаёт новую переменную на итерацию
  • Объявления функций поднимаются целиком

А ещё Object.freeze — неизменяемость объекта (поверхностная)

Подробно

console.log(a);   // undefined — var поднят
var a = 1;

console.log(b);   // ReferenceError — временная мёртвая зона
let b = 2;

const user = { name: "Аня" };
user.name = "Оля";    // можно: меняем объект
user = {};            // TypeError: переприсваивание

Hoisting. Перед выполнением движок регистрирует объявления области. var сразу инициализируется undefined, let/const — регистрируются, но недоступны до своей строки.

Блочная область:

for (var i = 0; i < 3; i++) setTimeout(() => console.log(i));  // 3 3 3
for (let j = 0; j < 3; j++) setTimeout(() => console.log(j));  // 0 1 2

var на верхнем уровне скрипта становится свойством window, let и const — нет.

Что хотят услышать

  • Область видимости: функция против блока.
  • Hoisting и временная мёртвая зона.
  • Что запрещает const.
  • Ловушка var в цикле.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗const запрещает изменять содержимое объекта, а не только переприсваивание
  • ✓var — область функции и hoisting; let и const — блок и TDZ; const запрещает переприсваивание
  • ✗let имеет область видимости функции, а var — блочную
  • ✗var не поднимается, поэтому обращение до объявления даёт ReferenceError

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования