Oi juliana.pellegrinetti toda vez que você abrir seu arquivo html no navegador e ele não exibir nada, e ficar rodando e rodando sem parar, é porquê existe algum código que nunca termina de ser processado, o que também chamamos de loop infinito. Ok o que fazer quando isso acontece ?
R: Primeiro procure por estruturas de repetição (while, for) e verifique se a lógica que eles estão utilizando permite que o laço seja corretamente, inicializado, a condição está correta, e o incremento ou decremento acontece.
Olhando o seu código temos um while
Vamos análisá-lo conforme sugeri acima:
var numero = 30;
while (numero <=40) {
if (numero != 33 || numero != 37);
mostra (numero);
mostra (numero + 1);
}
A Váriavem numero inicializa com 30. Então entramos no while a condição é enquanto for menor ou igual a 40.Blz!Aí temos o if, com esse if vamos mostrar todos os números diferentes de 33 ou diferentes de 37, mas vou deixar essa questão pro final. Logo em seguida temos essa linha:
mostra (numero);
numero vale 30 então mostraremos 30 na tela com a função mostra logo em seguida temos:
mostra (numero + 1);
Aqui mostraremos na tela 30 + 1 ou seja 31.Apesar de estarmos mostrando 31, mas, porém, todavia o valor de numero continua o mesmo, pois não fizemos nenhuma atribuição desse novo valor a variável número. Ou seja o incremento não acontece, logo em seguida a condição retornará pela segunda vez ao laço com o mesmo valor, 30.
Agora que você já sabe o porquê de o loop ficar infinito, vamos consertar umas coisas:
Primeiro vamos relembrar que queremos imprimir todos os números de 30 a 40 exceto os números 33 e 37. Em outras palavras queremos mostrar:
30 31 32 34 35 36 38 39 40
A lógica do jeito que está no if, não consegue fazer isso porque meu if tem como condição se número é diferente de 33 ou diferente de 37, como toda vez o número em questão vai ter um único valor ele sempre vai ser diferente de um dos dois números, logo irá imprimir todos, e não é o que queremos.A lógica correta seria assim:
if (numero != 33 && numero != 37);
Assim garantiremos que não mostraremos nem um e nem outro.Vamos pular ambos.
Além disso precisamos consertar nosso incremento caso contrário continuaremos no loop infinito.
A implementação já com os ajustes ficaria assim:
<meta charset = "UTF-8">
<script>
function pulaLinha () {
document.write ("<br> <br> <br>");
}
function mostra (frase){
document.write (frase);
pulaLinha();
}
var numero = 30;
while (numero <=40) {
if (numero != 33 && numero != 37){
mostra (numero);
}
numero++;
}
mostra ("FIM");
</script>
Espero ter te ajudado e bons estudos.