QJavaScript · Interview preparation
What does a JavaScript closure retain?
Closures explain how functions continue to access lexical bindings after their outer scope has returned.
The idea to remember.
A closure is a function together with access to the lexical environment in which it was created. The function can continue reading and updating those bindings after the outer function has returned. A closure does not automatically freeze an immutable snapshot of every value.
01Learn by doing
From first example to real project.
Start with the smallest working idea, examine a more detailed example, then look at a real application pattern. Adapt dependencies, error handling and data models to your project.
Basic: closure remembers a binding
01 / BEGINNERThe returned function can still use a variable from its outer scope.
function createCounter() {
let count = 0;
return () => ++count;
}
const next = createCounter();
console.log(next()); // 1
console.log(next()); // 2Intermediate: block scope
02 / INTERMEDIATEEach iteration can keep its own binding with let.
const callbacks = [];
for (let i = 0; i < 3; i++) callbacks.push(() => i);
console.log(callbacks.map(fn => fn())); // [0, 1, 2]Real scenario: isolate private state
03 / REAL SCENARIOA factory can retain private data without exposing it globally.
function createCart() {
const items = [];
return {
add: item => items.push(item),
total: () => items.reduce((sum, item) => sum + item.price, 0)
};
}02Check your understanding
Try it in your own words.
Explain what does a JavaScript closure retain without looking at the code. Then modify the intermediate example, describe one trade-off and identify when the real-world pattern fits.
Keep learning here.
Explore more in-depth guides, exercises and related interview questions in this library.
Browse JavaScript study guides ↗