Проверяет понимание области видимости переменных в JavaScript и способов ограничения доступа к ним во вложенных функциях.
В JavaScript переменные, объявленные во внешней функции, автоматически доступны во вложенных функциях благодаря механизму замыканий. Это означает, что вложенная функция может читать и изменять переменные родительской функции. Однако иногда требуется изолировать вложенную функцию от внешних переменных, чтобы избежать случайных изменений или конфликтов имен.
Первый способ — теневое переопределение (shadowing). Если во вложенной функции объявить переменную с тем же именем, она будет локальной и закроет доступ к внешней. Например:
function outer() {
let x = 10;
function inner() {
let x = 20; // локальная переменная, внешняя x недоступна
console.log(x); // 20
}
inner();
console.log(x); // 10
}Второй способ — использовать блоки с let или const. Переменные, объявленные внутри блока (например, внутри if или for), не видны за его пределами. Если вложенная функция объявлена внутри такого блока, она не увидит переменные, объявленные вне блока, но внутри внешней функции.
Третий способ — использовать модули (ES6). Переменные, объявленные в модуле, не экспортируются по умолчанию, и вложенные функции из других модулей не имеют к ним доступа. Однако внутри одного модуля замыкания все равно работают.
function createCounter() {
let count = 0;
return function() {
let count = 100; // теневое переопределение
return count;
};
}
const getCount = createCounter();
console.log(getCount()); // 100, внешний count не используетсяВ этом примере вложенная функция возвращает локальную переменную count, игнорируя внешнюю. Это полезно, когда нужно изолировать логику.
Теневое переопределение — самый простой способ сделать переменную внешней функции недоступной внутри вложенной. Используйте его, когда нужно избежать конфликтов имен или случайных изменений. Для более строгой изоляции применяйте модули или блоки с let/const.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию