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 é.