Skip to content
javascript questions

JavaScript · 3 of 10middle~1 min

What is a closure and how is it used in practice?

#core#scope

Closures

A closure is a function that remembers the variables from its outer scope even after that scope has finished executing.

Basic example

js
function makeCounter() { let count = 0; // this variable is "closed over" return function() { count++; return count; }; } const counter = makeCounter(); counter(); // 1 counter(); // 2 counter(); // 3 // count is private - can't be accessed from outside

Practical use cases

Private state (data encapsulation)

js
function createStore(initialValue) { let state = initialValue; return { get: () => state, set: (value) => { state = value; }, }; }

Function factories

js
function multiply(factor) { return (number) => number * factor; } const double = multiply(2); const triple = multiply(3); double(5); // 10 triple(5); // 15

Memoization

js
function memoize(fn) { const cache = new Map(); return function(key) { if (cache.has(key)) return cache.get(key); const result = fn(key); cache.set(key, result); return result; }; }

Every function in JavaScript is a closure - it always has access to its surrounding scope. The interesting cases are when the outer function has already returned.

updated

did you know it?

related questions