Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: function scope, block scope, var, let, const, hoisting

Чем функциональная область видимости отличается от блочной?

Вопрос проверяет понимание различий между функциональной (var) и блочной (let/const) областями видимости в JavaScript, что важно для написания предсказуемого кода.

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

Функциональная область видимости (var) ограничена телом функции, а блочная (let/const) — блоком кода (например, внутри if или for). Переменные var всплывают (hoisting) и инициализируются undefined, а let/const находятся во временной мёртвой зоне до объявления. Это делает let/const более безопасными для современных проектов.

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

Основное различие

Функциональная область видимости означает, что переменная, объявленная с помощью var, доступна в пределах всей функции, в которой она объявлена, независимо от вложенных блоков. Блочная область видимости (let и const) ограничивает видимость переменной только тем блоком кода (фигурными скобками), где она объявлена.

Пример для наглядности

function example() {
  if (true) {
    var a = 1;   // функциональная область
    let b = 2;   // блочная область
  }
  console.log(a); // 1 — доступно
  console.log(b); // ReferenceError: b is not defined
}

Переменная a видна за пределами блока if, потому что var привязана к функции. b же существует только внутри блока.

Всплытие (hoisting) и временная мёртвая зона

Переменные var всплывают в начало функции и инициализируются значением undefined. Поэтому их можно использовать до объявления (но значение будет undefined). let и const тоже всплывают, но не инициализируются — они находятся во временной мёртвой зоне (Temporal Dead Zone) до момента объявления. Попытка обратиться к ним до строки объявления вызывает ReferenceError.

console.log(x); // undefined (var)
var x = 5;

console.log(y); // ReferenceError
let y = 10;

Практическое применение

В современном JavaScript рекомендуется использовать let и const для всех переменных, чтобы избежать случайных утечек и ошибок, связанных с функциональной областью видимости. const применяется для значений, которые не должны переназначаться, let — для изменяемых переменных. var может встречаться в старом коде, но в новых проектах его лучше избегать.

Вывод: Понимание разницы между функциональной и блочной областью видимости помогает писать более надёжный и предсказуемый код, особенно при работе с циклами, условиями и замыканиями.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#function scope

#block scope

#var

#let

#const

#hoisting

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию