Então, você esta certo quanto à utilização dos parametros de uma função como um termo aberto. E é exatamente isso que vc esta fazendo.
Se você entrar na documentação do forEach, vc vai ver que ele aciona uma callback (a função que vc esta utilizando) para cada item da lista, o primeiro parametro é sempre o ITEM da vez.
Vamos ao texto da documentação:
arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);
ONDE:
callback
Função para executar em cada elemento, recebendo três argumentos:
currentValue
O valor atual do elemento sendo processado no array.
index Optional
O índice do elemento atual sendo processado no array.
array Optional
O array que forEach() está sendo aplicado.
thisArg Optional
Opcional. Valor a ser usado como this quando executar callback.
Ou seja, está funcionando pq quando vc pede para ele executar sua função ele executa e coloca o "currentValue" no lugar do "teste".
Exemplo:
let a = ["aaa","bbb","ccc"]
a.forEach((minhaLetra)=>{console.log(minhaLetra)})
Seria a mesma coisa que o seu código, eu só não usei uma função declarada.
Agora execute o cófigo abaixo com os parâmetros opcionais e veja o que sairá:
let a = ["aaa","bbb","ccc"]
a.forEach(b)
function b(exemplo, exemplo2, exemplo3){ console.log("A ATUAL STRING DO ARRAY É: ", exemplo, " A POSIÇÃO DO ARRAY É: ", exemplo2, " E MEU ARRAY É ", exemplo3)
}
Espero ter ajudado. Abraços!!!