🧠 Introduction
Closures are one of the most powerful—yet confusing—features in JavaScript. If you've ever wondered how JavaScript "remembers" variables after a function has run, this post is for you.
By the end, you’ll understand what closures are, why they matter, and how to use them like a pro.
🔍 What Is a Closure?
A closure is a function that remembers the variables from its lexical scope, even after that outer function has finished executing.
In simple terms:
A closure lets a function access variables defined outside its scope—even after the outer function is done running.
📦 Basic Example
function outer() {
let count = 0;
return function inner() {
count++;
console.log(`Count is: ${count}`);
};
}
const counter = outer();
counter(); // Count is: 1
counter(); // Count is: 2
counter(); // Count is: 3
✅ Even though outer()
has finished running, inner()
still has access to count
. That’s closure in action.
🧰 Real-Life Use Cases
1. Data Privacy (Encapsulation)
function createSecret() {
let secret = '🕵️♂️';
return {
getSecret: () => secret,
setSecret: val => secret = val
};
}
const obj = createSecret();
console.log(obj.getSecret()); // 🕵️♂️
obj.setSecret('🔐');
console.log(obj.getSecret()); // 🔐
👉 Variables like secret
stay hidden from the outside world.
2. Function Factories
function multiplier(factor) {
return function (x) {
return x * factor;
};
}
const double = multiplier(2);
console.log(double(5)); // 10
👉 double
is a closure that remembers factor = 2
.
❗ Common Pitfall
Closures inside loops can be tricky:
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000);
}
// Output: 3, 3, 3
✅ Fix with let
:
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000);
}
// Output: 0, 1, 2
🧠 Final Thoughts
Closures are everywhere in JavaScript—from callbacks and event handlers to React hooks and private state.
Mastering them will deepen your understanding of how JavaScript really works.
💬 What’s Next?
- Want to dive into currying, memoization, or scope chains?
- Let me know in the comments or drop a ❤️ if you found this useful!