Da un uso práctico de un closure, y el bug clásico.
Práctico: un contador o un caché donde el estado no debe ser alcanzable desde afuera, una función factory, o cualquier cosa que tenga que recordar un valor entre llamadas. El bug clásico es for (var i = 0; ...) setTimeout(() => console.log(i)) imprimiendo el valor final cada vez, porque todos los callbacks cierran sobre un solo binding. let crea un binding nuevo por iteración y lo arregla.