D DevBrainBox

JavaScript Closures

JS

What is a closure?

A closure is created when a function “remembers” its outer scope, even after that outer function has finished executing. In other words:

  • A closure is a combination of a function + the scope in which it was created.

This allows the function to access variables from its outer function scope even after the outer function has returned.

function outer() {
 let name = "Alice";

function inner() {
 console.log("Hello, " + name);
}
 return inner;
}

let greet = outer(); // outer() runs, returns inner
greet(); // Hello, Alice
  • outer runs and creates the variable name.
  • outer returns the inner function.
  • greet now holds the inner function.
  • When you call greet(), it still has access to name, even though outer has finished.

counter using closures

Closures are commonly used to remember state.

function createCounter() {
 let count = 0;

return function() {
 count++;
 console.log(count);
 };
}

const counter = createCounter();

counter(); // 1
counter(); // 2
counter(); // 3
  • count lives inside createCounter, but counter() still remembers it because of the closure.

Why closures are useful?

Data privacy:

Keep variables “private” and only accessible through functions.

function secretNumber() {
 let secret = 42;

return {
 getSecret: function() {
return secret;
 }
  };
}

const obj = secretNumber();
console.log(obj.getSecret()); // 42
console.log(obj.secret);      // undefined
ConceptMeaning
ClosureA function remembers the variables from the place where it was created, even after that scope is gone.
Common usesData privacy, counters, factory functions, event handlers.

On this page