Oi, Queren, tudo bem?
Respondendo a sua pergunta: sim, é um processo interno. Métodos como forEach
, map
, filter
e reduce
possuem uma lógica interna para determinar os valores dos parâmetros declarados na função callback.
Vou dar um exemplo de código do vídeo sobre forEach
:
const notas = [10, 6.5, 8, 7.5];
let somaDasNotas = 0;
notas.forEach(function (nota) {
somaDasNotas += nota;
});
No código acima, nós declaramos uma função anônima, que está sendo utilizada como função callback do método forEach
. Nós apenas declaramos essa função anônima, que espera receber um parâmetro nota
. Note que em nenhuma parte do código nós executamos essa função explicitamente (e nem haveria como, já que ela nem possui um nome).
Isso revela que, na verdade, a lógica interna do método forEach
irá executar a função callback pra gente. Você pode imaginar que, na implementação interna do forEach
, há uma estrutura for
que executa a função callback que passamos. E, no momento de cada execução, é passado o valor de uma das notas do array para o parâmetro nota
.
Isso reforça mais uma vez a terminologia "função callback", que significa uma função que é "chamada de volta". Nesse caso, a função callback passada para o forEach
é chamada de volta para ser executada para cada um dos elementos do array.
A mesma lógica é aplicada para o método reduce
. Por exemplo, no código abaixo:
const notasDaSala = [6, 5, 8, 9, 5, 6];
const somaDasNotas = notasDaSala.reduce((acumulador, nota) => {
return acumulador + nota;
}, 0);
O processo é semelhante: passamos uma função callback para o método reduce
, e ele se encarregará de executar essa função para cada item do array, passando os valores corretos para os parâmetros acumulador
e nota
em cada execução.
Espero ter ajudado! Abraços e bons estudos :)