Eureka! Eu finalmente entendi fechamentos

Veja este exemplo de código JS:

function makeAddFunction(amount) {
function add(number) {
return number + amount;
}

return add;
}

Agora, posso fazer isso:

addTwo = makeAddFunction(2);
addTwo
(7);

O resultado será 9. Isso é equivalente a makeAddFunction (2) (7). A variável addTwo pode manter seu estado e esperar até mais tarde para executar. A função interna retém o acesso ao ambiente que existia no ponto em que foi definido. O número da variável não é definido até que uma chamada de função em addTwo seja feita. Se o argumento para addTwo for gerado dinamicamente e essa variável for definida bem fora do escopo da função original, ainda poderei passar essa variável.

A função interna agora tem a flexibilidade de ser feita para fazer coisas diferentes. Isso me dá a capacidade de criar funções semelhantes que fornecem resultados diferentes.

Além disso, isso dá acesso a diferentes funções ao mesmo nome de variável, criando uma espécie de namespace para js