Boa noite, qual o objetivo do código?
Está em loop, pois a incrementação do contador está dentro do laço de repetição for(posicao = 0; posicao < ingredientes.length; posicao++){
...
}
Na condição do seu for, ele irá repetir até quando a posicao for menor que o tamanho do seu array.
Porém seu array não tem nenhuma informação antes de entrar nesse loop, logo não satisfaz a condição e volta novamente para o while. Pois a posição é igual a 0 e ingredientes.length também é igual a 0
Dessa forma seu contador não recebe a incrementação e nunca sai do seu While
Caso deseja armazenar os ingredientes e exibir no console.log, não precisa do segundo laço de repetição. Ficará assim:
<head>
<meta charset="utf-8">
<script>
var ingredientes = []; // Declara o array
var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?")); // Pergunta quantos ingredientes será adicionado, converte para inteiro e armazena na variável quantidade.
var contador = 1; // declara o contador e inicializa com o valor 1
while(contador <= quantidade) { /* A condição é
enquanto o contador for menor ou igual a quantidade, ou seja se digitei 3 de quantidade, o loop irá repetir até o contador for igual ou menor que a quantidade.*/
var ingrediente = prompt("Informe o " + contador + "º ingrediente: "); // Solicita o ingrediente ao usuário e armazena na variável ingrediente concatenando meu contador que nesse momento é 1;
ingredientes.push(ingrediente); //Adicionar o valor da variável na ultima posição do array.
contador++; // incrementa o contador, logo no próximo loop ele será 2 e assim por diante
}
console.log(ingredientes); // Depois de percorrer todos os loops, exibe o valor do array no console.
</script>
</head>