Вложенность областей видимости
Вложенность областей видимости означает, что внутренняя область кода (например, функция внутри другой функции) может обращаться к переменным внешней области, но не наоборот.
Это работает по принципу «внутри видит наружу, но наружу не видит внутрь».
Пример:
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
}
Почему это важно:
- Вы можете создавать локальные контексты: например, обработку авторизации внутри функции, не засоряя внешнюю область
- Не нужно бояться, что переменные внутри вспомогательных функций перезапишут глобальные
- Легче тестировать: функция работает только с тем, что ей передано или что видно из внешней области
Всегда объявляйте переменные как можно глубже — в том блоке, где они реально нужны. Это делает код чище, безопаснее и предсказуемее.