Executando verificação de segurança...
3

Por que o parâmetro array não retorna uma array e sim uma lista? Assim, de forma genérica?

Porque forEach não funciona apenas para arrays, mas também para nodelists.

Só pra ser chato (sim, eu sou :-P), da forma que foi escrito dá a impressão de que forEach é algo que está acima do array, nodelist e demais iteráveis, e que por isso ele recebe sempre uma estrutura genérica que serve para todos os casos.

Mas na verdade é o contrário: cada objeto define seu próprio método forEach, que por usa vez tem sua própria versão do callback. O fato de todos funcionarem da mesma forma é mero detalhe.

Veja na documentação que no método forEach do Array, o terceiro parâmetro da função de callback é o próprio array. Não é uma estrutura genérica, é o array no qual forEach foi chamado.

Já no caso do NodeList, a documentação diz que o terceiro parâmetro é o próprio NodeList (novamente, não é uma estrutura genérica, é o próprio objeto no qual forEach foi chamado).

O mesmo vale para outros objetos, como Map (no qual o terceiro parâmetro é o próprio Map - e neste caso é mais interessante, já que Map não é uma lista), Set (o terceiro parâmetro é o próprio Set), Headers (o terceiro parâmetro é o próprio objeto Headers), etc.

Ou seja, cada um desses diferentes objetos definiu o método forEach (que por acaso funcionam da mesma forma, até porque não tem muito o que inventar). Em todos eles a função de callback recebe como terceiro parâmetro o próprio objeto no qual forEach foi chamado (e sempre é o próprio objeto, nunca uma estrutura genérica). Tanto é que na respectiva documentação de cada objeto, repare como o nome do parâmetro muda para refletir o que ele de fato é.

Carregando publicação patrocinada...
1

Veja na documentação que no método forEach do Array, o terceiro parâmetro da função de callback é o próprio array. Não é uma estrutura genérica, é o array no qual forEach foi chamado.

Já no caso do NodeList, a documentação diz que o terceiro parâmetro é o próprio NodeList (novamente, não é uma estrutura genérica, é o próprio objeto no qual forEach foi chamado).

Entendi o que tu falou, e era exatamente isso que quis passar quando escrevi, não sei se consegui.

Vi que tu insistiu na expressão estrutura genérica, mas não foi isso que escrevi. Estrutura genérica dá a entender que existe uma estrutura de dados em Javascript (que tem seu próprio prototype) que é genérica.

O que eu quis dizer foi forma genérica, em oposição a forma específica.

O que seria específico?

  • Array
  • Nodelist
  • ...

O que seria genérico?

  • Uma lista que pode ser tanto array quanto nodelist, depende de quem chamou o forEach

Lá no post escrevi duas frases que podem estar mais claras:

  • "Ele geralmente se chama array e retorna a própria lista que você está iterando."
  • "E o terceiro é a própria array que você está iterando."

Acho que foi mais a escolha errada de palavras, mas a intenção foi passar o mesmo que tu disse.