← Назад к вопросам
Приведи пример использования clouser
1.6 Junior🔥 191 комментариев
#Node.js и JavaScript
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Пример использования Closure в JavaScript/Node.js
Замыкание (closure) — это функция, которая имеет доступ к переменным из своей лексической области видимости, даже когда эта функция выполняется вне этой области. Это один из самых важных концептов JavaScript.
Классический пример: Счётчик
function createCounter() {
let count = 0; // Приватная переменная
return {
increment() {
return ++count;
},
decrement() {
return --count;
},
getCount() {
return count;
}
};
}
const counter = createCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.decrement()); // 1
console.log(counter.getCount()); // 1
Переменная count "запомнена" внутри замыкания и недоступна извне — это создаёт инкапсуляцию.
Практический пример: Кэширование результатов функции
function createMemoizedFunction(fn) {
const cache = {}; // Приватный объект кэша
return function memoized(...args) {
const key = JSON.stringify(args);
if (key in cache) {
console.log('Возврат из кэша');
return cache[key];
}
console.log('Вычисляем значение');
const result = fn(...args);
cache[key] = result;
return result;
};
}
const expensiveSum = (a, b) => {
// Имитация дорогого вычисления
for (let i = 0; i < 1000000000; i++) {}
return a + b;
};
const memoizedSum = createMemoizedFunction(expensiveSum);
memoizedSum(2, 3); // Вычисляем значение
memoizedSum(2, 3); // Возврат из кэша
Backend пример: Управление подключением к БД
function createDatabaseConnection(connectionString) {
let isConnected = false;
let connection = null;
return {
async connect() {
if (isConnected) {
return connection;
}
connection = await db.connect(connectionString);
isConnected = true;
return connection;
},
async disconnect() {
if (isConnected && connection) {
await connection.close();
isConnected = false;
}
},
isReady() {
return isConnected;
}
};
}
const dbConnection = createDatabaseConnection('postgresql://...');
await dbConnection.connect();
Пример с функцией-обработчиком (middleware)
function createAuthMiddleware(secret) {
return (req, res, next) => {
const token = req.headers.authorization;
try {
const decoded = jwt.verify(token, secret); // secret в замыкании
req.user = decoded;
next();
} catch (error) {
res.status(401).send('Unauthorized');
}
};
}
const authMiddleware = createAuthMiddleware(process.env.JWT_SECRET);
app.use(authMiddleware);
Когда использовать:
- Инкапсуляция данных — скрыть приватные переменные от внешнего доступа
- Фабрики функций — создание функций с предконфигурированным состоянием
- Кэширование — сохранение состояния между вызовами
- Обработчики событий — привязка контекста к функции
Замыкания — фундамент JavaScript и Node.js, правильное их использование делает код более безопасным и управляемым.