for(var posicao = 0;posicao <= ingredientes.length;posicao++){
if(ingrediente == ingredientes[posicao]){
igual = true;
break;
}
Se eu entendi bem oque acontece, quando o ingrediente é encontrado sua variavel igual vai para true e seu break para o laço FOR não o while, seguindo, como igual = true o programa não entra nessa parte:
if(igual == false){
ingredientes.push(ingrediente)
contador++;
}
logo seu contador não é incrementado e fica num loop infinito.
quando eu aprendi, me recomendaram a não usar muito o break por que pode ocorrer coisas como essa, tente forçar a parada de outra forma
espero ter entendido e ajudado