Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: let, block

Почему при использовании let в цикле значения разные

Вопрос проверяет понимание блочной области видимости и работы замыканий в циклах.

Короткий ответ

let в цикле создает новую переменную на каждую итерацию. Поэтому каждое замыкание “запоминает” свое значение. В отличие от var, где используется одна общая переменная на весь цикл, let предотвращает типичную ошибку с одинаковыми значениями. Это поведение заложено в спецификацию языка.

Длинный ответ

Что происходит с let в цикле

Когда используется let:

  1. Каждая итерация цикла имеет свою область видимости

  2. Переменная пересоздается заново

  3. Замыкание захватывает уникальное значение

Пример с let

for (let i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}

Результат:

  1. 0

  2. 1

  3. 2

То же самое с var

for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}

Результат:

  • 3

  • 3

  • 3

Почему так происходит

  1. var имеет одну общую переменную

  2. К моменту выполнения setTimeout цикл уже завершился

  3. let создает новый binding на каждую итерацию

Практический эффект

  • let делает код безопаснее

  • не нужны IIFE или дополнительные обертки

  • поведение интуитивно ожидаемое

Вывод

Разные значения при let — это не “магия”, а результат блочной области видимости и корректной работы замыканий.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#let

#block

Подпишись на React Developer в телеграм