Funções que aceitam outras definições de funções como argumento de entrada e/ou retornam novas definições de funções como resultado de sua execução.
function somar(a, b, c) { return a + b + c } function multi(a, b) { return a * b } // Permite passar outra função como argumento de entrada: fn function executar(fn, ...params) { // Retorna uma nova função como saída return function(textoInicial) { return `${textoInicial} ${fn(...params)}!` } } const r1 = executar(somar, 4, 5, 6)('O resultado da soma é') const r2 = executar(multi, 30, 40)('O resultado da multiplicação é') console.log(r1) console.log(r2)