← Назад к вопросам
Приведи пример использования замыкания
2.0 Middle🔥 241 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Приведи пример использования замыкания
Замыкание (Closure) - это функция, которая имеет доступ к переменным из своей внешней функции, даже после того как внешняя функция завершила работу.
Как работает замыкание
function outer() {
const message = 'Привет';
function inner() {
console.log(message);
}
return inner;
}
const greeting = outer();
greeting(); // "Привет" - inner помнит переменную message
Хотя outer() завершила работу, inner всё ещё имеет доступ к переменной message.
Пример 1: Счётчик с приватным состоянием
function createCounter() {
let count = 0;
return {
increment: () => ++count,
decrement: () => --count,
getCount: () => count
};
}
const counter = createCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.getCount()); // 2
// count полностью приватна
console.log(counter.count); // undefined
Пример 2: Функция-генератор ID
function idGenerator(prefix) {
let id = 0;
return () => prefix + (++id);
}
const userId = idGenerator('USER_');
const postId = idGenerator('POST_');
console.log(userId()); // USER_1
console.log(userId()); // USER_2
console.log(postId()); // POST_1
// Каждый генератор имеет свой счётчик в замыкании
Пример 3: Функция с кэшированием
function memoize(fn) {
const cache = {};
return (...args) => {
const key = JSON.stringify(args);
if (key in cache) return cache[key];
const result = fn(...args);
cache[key] = result;
return result;
};
}
const square = memoize(n => n * n);
console.log(square(5)); // вычисляет
console.log(square(5)); // из кэша
Пример 4: Модульный паттерн
const module = (function() {
const data = [];
return {
add: (item) => data.push(item),
get: () => [...data]
};
})();
module.add('item1');
console.log(module.get()); // ['item1']
console.log(module.data); // undefined - data приватна
Пример 5: Обработчик события
function setupButton(buttonId, title) {
const button = document.getElementById(buttonId);
button.addEventListener('click', () => {
console.log(`${title} нажата`); // замыкание помнит title
});
}
setupButton('btn1', 'Кнопка 1');
setupButton('btn2', 'Кнопка 2');
Замыкания позволяют создавать приватные переменные и функции с памятью. Это критически важный концепт JavaScript, используемый везде: в обработчиках, async функциях, модулях.