O primeiro parâmetro da função callback parâmetro do forEach representa o valor do indice que está sendo iterado, o segundo representa o numero do índice no qual está sendo iterado, e o terceiro representa o próprio array onde o forEach está percorrendo. 
Seu código até funcionaria se você aplicasse o método splice(), chamando o 3° parâmetro da funcao callback, porém não traria o resultado esperado.
Vejo que seu objetivo é remover os valores duplicados do array original, para isso a solução abaixo atende aos seus requisitos. 
const nomes = ["Ana", "Clara", "Maria", "Maria", "João", "João", "João"];
nomes.forEach((nome, indice, array) => {
// usando o laço for, para percorrer o restante da lista antes do forEach e assim verificar se existem valores duplicados. 
        for(let index = indice + 1; indice < array.length; indice+=1){
           if(array[index] === nome) array.splice(index, 1);
        }
    })
console.log(nomes);
Obs: 0 método splice funciona com uma funcao callback na qual recebe 3 parâmetros, o primeiro é o indice de início da remoção, o segundo é a quantidade de indices a serem removidos contando com o indice de início, a partir do terceiro parâmetro vc coloca o conteúdo que irá substituir os indices que estão sendo removidos, o terceiro parâmetro em diante é opcional. ex forEach(indiceInicio, quantidadeRemocao, substituicao);
A funcionalidade desses parâmetros são definidas pelo método que chamamos mesmo, no início é estranho para quem está começando pois
diferente de uma funcao normal, neste casa nós não definimos o que cada parâmetro carregará para dentro do bloco.