Вложенность областей видимости

Вложенность областей видимости означает, что внутренняя область кода (например, функция внутри другой функции) может обращаться к переменным внешней области, но не наоборот.

Это работает по принципу «внутри видит наружу, но наружу не видит внутрь».

Пример:

function outerFunction() {
  const userName = "Анна";

  function innerFunction() {
    console.log(userName); // доступна — из внутренней функции видна внешняя переменная
    const userRole = "admin";
  }

  innerFunction();
  console.log(userRole); // ошибка: userRole is not defined
}

Здесь:

  • innerFunction может прочитать userName — потому что он объявлен во внешней функции
  • outerFunction не может прочитать userRole — он существует только внутри innerFunction

Это естественное поведение, основанное на цепочке областей видимости — так называемой цепочке лексических окружений.

Ещё один пример — вложенные блоки:

function checkPermissions() {
  const userId = 123;

  if (userId > 0) {
    const hasAccess = true;
    console.log(userId); // работает — видит внешнюю переменную
    console.log(hasAccess); // работает — своя переменная
  }

  console.log(hasAccess); // ошибка — hasAccess не видна за пределами блока if
}

Почему это важно:

  • Вы можете создавать локальные контексты: например, обработку авторизации внутри функции, не засоряя внешнюю область
  • Не нужно бояться, что переменные внутри вспомогательных функций перезапишут глобальные
  • Легче тестировать: функция работает только с тем, что ей передано или что видно из внешней области

Всегда объявляйте переменные как можно глубже — в том блоке, где они реально нужны. Это делает код чище, безопаснее и предсказуемее.