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