Devs Hive
Повернутися до всіх запитань

Що таке замикання в JS?

JuniorMiddleJavaScript
Зустрічали на інтервʼю:2 користувачів

Це напевно маст хев питання на інтервʼю, особливо для Junior i Middle розробників. Якщо вас запитали його, то ваша задача відповісти в неочікуваному ключі.

Найперше, розкажіть простими словами, що таке замикання.

Простими словами - це здатність функції запамʼятовувати область видимості, де вона була оголошена.

Розберемо на простому прикладі:

let count = 0;

function createCounter() {
return function () {
// при спробі доступу до count, шукаємо змінну в середині функції
// в середині функції ми її не знаходимо і починаємо шукати вище
// в createCounter змінної теж нема тому ми рухаємось вище
// ми знаходимо count в глобальній області видимості і використовуємо його
count++;

return count;
};
}

const counter = createCounter();

console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

Після того як ви відповіли на питання, скажіть АЛЕ тут є нюанс.

Якщо розглядати замикання в контексті high-load чи навіть data-intensive в Node.js проектах, то його необережне використання, може привести до Memory Leaks.

Це відбувається тому що Garbage Collector не очищає обʼєкти на які є посилання. І якщо зберігати в замиканні великі обʼєкти, цілком імовірно отримати проблеми з памʼяттю. Тому варто памʼятати про WeakMap, WeakSet, WeakRef.

Зустрічав на інтервʼю?

Коментарі (1)

Увійдіть, щоб залишити коментар

VT
Користувач
20 лютого 2026 р. о 08:25

Ну тут count знаходиться поза межами батьківської функції. А тому втрачається один з найбільших переваг - інкапсуляція. Саме тому що якісь структури даних інкопсульовані, і можуть виникати stale closures, коли референс зберігається у дочірній функції, але не використовується.