As funções são valores de primeira classe
Aqui o JavaScript te dá um poder que surpreende quem vem de outras linguagens: as funções são valores como qualquer outro. Você pode guardá-las em variáveis, colocá-las em arrays, passá-las como argumento e retorná-las a partir de outra função, igual ao que você faria com um número ou um texto. Isso se chama "funções de primeira classe".
Passar uma função como argumento
Uma função que recebe outra função se chama função de ordem superior:
function aplicar(valor, operacao) {
return operacao(valor);
}
const dobro = n => n * 2;
console.log(aplicar(5, dobro)); // 10
Retornar uma função
function multiplicador(fator) {
return n => n * fator;
}
const porTres = multiplicador(3);
console.log(porTres(10)); // 30
Essa ideia, simples na aparência, é a base dos padrões mais poderosos do JavaScript. Quando uma função "lembra" valores de onde nasceu, você tem um closure: vai desbloqueá-lo no próximo módulo, e é ali que as funções deixam de ser ferramenta para virar um verdadeiro superpoder.
Exemplos
Guardar funções em um objeto e chamá-las
const operacoes = {
somar: (a, b) => a + b,
subtrair: (a, b) => a - b,
};
console.log(operacoes.somar(2, 3)); // 5
console.log(operacoes.subtrair(7, 4)); // 3