Closures and higher-order functions

Treat functions as values, remember state with closures and process arrays with map, filter and reduce.

Beginner 14 min read Lesson 9 of 480 Challenge included
What you will be able to do
  • Return functions from functions
  • Explain what a closure keeps
  • Use map, filter and reduce

A closure is a function that keeps access to the scope where it was created. Higher-order functions take or return other functions, which makes small building blocks composable.

closures.jsJavaScript
function makeCounter() {
  let count = 0;
  return () => ++count;
}

const next = makeCounter();
console.log(next(), next(), next());

const scores = [88, 92, 79, 95];
const passed = scores.filter((score) => score >= 80);
const curved = scores.map((score) => Math.min(100, score + 3));
const total = scores.reduce((sum, score) => sum + score, 0);

console.log(passed);
console.log(curved);
console.log(total, Math.round(total / scores.length));
Closure
A function plus the variables it captured.
Callback
A function passed to another function.
Higher-order
A function that takes or returns a function.
Pure function
Same input, same output, no side effects.
Your turn

Average with reduce

Medium

Return the average score using reduce, and 0 for an empty list.

JAVASCRIPT · starter
function average(scores) {
  // your code here
}
Check your understanding before moving on.
Knowledge checkQuestion 1

What does filter return?

Select an answer to continue
Study tools

Make it yours.

Keep a private note for this lesson, then turn the key ideas into flashcards you can revisit.

Sign in to save notes and flashcards.Both are private to your account and stay with your progress.
Sign in
Finished reading?

Lock in what you just learned.

Mark this lesson complete to save your place and move one step closer to the certificate.

Next: The DOM and events
Lesson 9 of 480 · 0% of course