Olá, Helen!
Contadores são as variáveis que controlam as repetições de um laço de iteração/repetição. Normalmente iniciamos os contadores com o valor do início da contagem, neste caso como o instrutor pediu uma contagem de 30 até 40 sem contar os números 33 e 37, então atribuímos os valor inicial do contador como 30. Como são contadores, sempre temos que incrementar ou decrementar seu valor, veja um exemplo usando o mesmo exercício:
<meta charset="UTF-8">
<script>
function pulaLinha() {
document.write("<br>");
document.write("<br>");
}
function mostrarFrase(frase) {
document.write(frase);
pulaLinha();
}
var contador = 30; // Iniciando contagem em 30.
while (contador <= 40) { /* Enquanto contador ser menor ou igual 40,
sendo assim, as próximas instruções serão realizadas repetidamente até
tal condição permanecer verdadeira */
if (contador == 33 || contador == 37) { /* Caso o contador ser igual 33
ou igual a 37. */
contador += 1; // O contador ganhar +1, e assim pula 33 e 37.
}
mostrarFrase(contador); /* Mostra o contador / quando a instrução if ser
realizada aqui será mostrado 34 ou 38, pois o contador foi incrementado
antes desta instrução. */
contador += 1; /* Devemos incrementar a contagem a cada repetição,
fazendo o valor do contador que antes iniciado em 30, tenha o valor 31, e
assim por diante. */
}
</script>
Perceba o fluxo de intruções do laço de repetição, temos algumas estruturas que controlam tal fluxo, como o while (enquanto), quer servirá para controlar até quando as instruções devem ser repetidas, temos estruturas condicionais como o if (se/caso) que será relizada caso sua condição seja verdadeira. Por fim estamos incrementando o valor do contador, após ser incrementado, o laço while encontrará o fim das instruções com seu fechamento de chaves que delimita seu corpo (o corpo do comando while), então ele voltará para o início, e vai testar novamente se o valor do contador ainda permanece menor ou igual 40, quando a condição ser falsa encerrará as repetições terminando assim a contagem.
Então basicamente o contador é uma das estruturas utilizadas para controlar estes loops de instruções, se eu quiser escrever um programa que repita várias vezes as mesmas intruções posso estar utilizando essas estruturas para controlar o fluxo. Isso é útil pois automatiza vários trechos no código. Segue um código mais simplificado:
<meta charset="UTF-8">
<script>
var contador = 0;
while (contador < 10) {
document.write('Game Over! ');
contador = contador + 1 // Contador será incrementado em 1 -> Se ele vale 2 ele recebe (2 + 1)
}
document.write('Fim do laço');
</script>