Give a practical use of a closure, and the classic bug.
Practical: a counter or a cache where the state must not be reachable from outside, a function factory, or anything that has to remember one value between calls. The classic bug is for (var i = 0; ...) setTimeout(() => console.log(i)) printing the final value every time, because all callbacks close over one binding. let creates a fresh binding per iteration and fixes it.