
JavaScript closures give functions memory: private state without globals, safer APIs, and predictable behavior. See what they are, when to use them, and why.
Martin Ferret
September 8, 2025
A closure is a function that keeps access to the variables from the place it was created, even after that outer function has finished. It’s the simplest way to give code “memory” without classes or globals.
Below is a small, practical example. We’ll keep the function as-is, then walk through exactly what happens line by line and why this pattern is useful in real projects.
function createCounter(initialCount = 0) {
let count = initialCount;
return function next() {
count++;
return count;
};
}
const getNextCount = createCounter(10);
console.log(getNextCount()); // 11
console.log(getNextCount()); // 12
console.log(getNextCount()); // 13
createCounter(10). Inside that call, JavaScript creates a new lexical environment where count is set to 10.createCounter returns the inner function next. Crucially, next is closed over the environment where count lives. Returning the function does not discard that environment; it stays alive because next still references it.getNextCount. Now, each call to getNextCount() runs next(), which reads and updates the same hidden count variable: 11, 12, 13, and so on.count directly (count is not a property on getNextCount), which means the state is private by construction. When nothing references getNextCount anymore, the closure (and its environment) can be garbage-collected.That’s a closure in action: function + remembered context.
getNextCount() and nothing else; internals remain hidden.createCounter(0), createCounter(100)) with zero risk of them interfering.Use a closure whenever logic must remember something across calls but you don’t want to expose that state:
Closures capture references to variables, not copies. Avoid capturing large objects you don’t need, and clean up listeners or timers that close over data when you’re done.
Get the latest news and updates on developer certifications. Content is updated regularly, so please make sure to bookmark this page or sign up to get the latest content directly in your inbox.

SEO in Nuxt with @nuxtjs/seo
Set up sitemaps, meta tags, structured data, OG images, and robots.txt in Nuxt with the official SEO module.
Reza Baar
Jun 17, 2026
![What’s the untracked function? [Angular Signals]](/.netlify/images?url=https:%2F%2Fapi.certificates.dev%2Fstorage%2FZzk75tZNAVT5d3GI9TxAD2JwkIFUKavFFj8sC2BL.png)
What’s the untracked function? [Angular Signals]
Learn how Angular's computed() function derives reactive values from signals and why it plays a key role in building high-performance, signal-based applications with cleaner and more predictable state management.
Alain Chautard
Jun 16, 2026

Events and Listeners: The Event System From the Inside Out
Laravel events are more than a way to decouple application logic. This article explores how the event system works under the hood, from dispatching and listeners to the internals that frequently appear on Laravel certification exams, helping you build a deeper understanding beyond basic usage.
Steve McDougall
Jun 11, 2026