JavaScript
Средний
Что такое замыкание в JavaScript?
Замыкания (Closures) в JavaScript
Определение:
Замыкание — это функция, которая запоминает своё лексическое окружение даже после того, как внешняя функция завершилась.
Базовый пример:
function createCounter() {
let count = 0; // Приватная переменная
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
Как это работает:
createCounter()создаёт переменнуюcount- Возвращает функцию, которая ссылается на
count - После возврата
countне удаляется — на неё есть ссылка - Каждый вызов
counter()имеет доступ кcount
Практические применения:
1. Приватные переменные:
function createWallet(initial) {
let balance = initial;
return {
deposit: (amount) => balance += amount,
withdraw: (amount) => balance -= amount,
getBalance: () => balance
};
}
const wallet = createWallet(100);
wallet.deposit(50);
console.log(wallet.getBalance()); // 150
console.log(wallet.balance); // undefined — приватно!
2. Функции-фабрики:
function multiply(a) {
return function(b) {
return a * b;
};
}
const double = multiply(2);
const triple = multiply(3);
console.log(double(5)); // 10
console.log(triple(5)); // 15
3. Мемоизация:
function memoize(fn) {
const cache = {};
return function(...args) {
const key = JSON.stringify(args);
if (!(key in cache)) {
cache[key] = fn(...args);
}
return cache[key];
};
}
Частая ошибка в циклах:
// ПРОБЛЕМА
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 3, 3, 3
// РЕШЕНИЕ 1: let
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 0, 1, 2
// РЕШЕНИЕ 2: IIFE
for (var i = 0; i < 3; i++) {
((j) => {
setTimeout(() => console.log(j), 100);
})(i);
}
Похожие вопросы
Готовитесь к собеседованию?
ENIGMA AI — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно