Lesson 9 of 15

Closures

Closures

A closure is a function that remembers the variables from the scope where it was created, even after that scope has finished.

function makeCounter() {
    let count = 0;
    return function() {
        count++;
        return count;
    };
}

const counter = makeCounter();
console.log(counter());  // 1
console.log(counter());  // 2
console.log(counter());  // 3

Each call to counter() increments count. The inner function has a reference to count — it closes over it. This is a closure.

Function Factories

Closures let you create customized functions:

function makeMultiplier(factor) {
    return n => n * factor;
}

const triple = makeMultiplier(3);
const quadruple = makeMultiplier(4);

console.log(triple(5));    // 15
console.log(quadruple(5)); // 20

Each returned function closes over its own factor.

Your Task

Write function makeAdder(x) that returns a new function. The returned function takes a number y and returns x + y.

const add5 = makeAdder(5);
console.log(add5(3));   // 8
console.log(add5(10));  // 15
JavaScript loading...
Loading...
Click "Run" to execute your code.