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 outsidePractical 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); // 15Memoization
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?