ENIGMA AI
ENIGMA AI
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

Как это работает:

  1. createCounter() создаёт переменную count
  2. Возвращает функцию, которая ссылается на count
  3. После возврата count не удаляется — на неё есть ссылка
  4. Каждый вызов 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 — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы