Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Por que meu código não funciona?

Por que meu código dessa forma funciona:

<meta charset="UTF-8">

<script>

var n = 30
while (n < 33) {
        document.write(n + "<br>")
        n = n + 1
    }

n = 34
while (n < 37) {
        document.write(n + "<br>")
        n = n + 1
    }

n = 38
while (n < 40) {
        document.write(n + "<br>")
        n = n + 1
    }

document.write("<br>FIM")

</script>

Mas dessa não?

<meta charset="UTF-8">

<script>

function counter(value) {
    while (value) {
        document.write(n + "<br>")
        n = n + 1
    }
}

var n = 30
counter(n < 33)

n = 34
counter(n < 37)

n = 38
counter(n <= 40)

document.write("FIM")

</script>
2 respostas
solução!

Bom, o que tá dando errado é que value recebe um valor, e você está tentando passar uma expressão... O que "Value" está recebendo é o resultado dessa expressão. O resultado de n < 33 (com n definido como 30) é "true". Você pode até experimentar se quiser visualizar isso... Se você colocar document.write(value) dentro da sua função, você vai ver que ele vai imprimir "true" na tela ao invés de um número. Então value = "true". Aí ele roda "while(true){ tarefa}". E como "true" é sempre verdadeiro, ele fica preso no loop "while".

Você tem algumas alternativas aqui pra chegar onde você quer, mas acredito que o que se aproxima mais do método que você queria usar é passar dois parâmetros pra função... o valor inicial, e o valor máximo. Ficaria assim:

<meta charset="UTF-8">

<script>

function counter(value, maxValue) {
    while (value < maxValue) {
        document.write(value + "<br>")
        value++;
    }
}

var n = 30
counter(n, 33)

n = 34
counter(n, 37)

n = 38
counter(n, 41)

document.write("FIM")

</script>

Outra maneira que tem de fazer é passar só o valor máximo pra função, e modificar o "n" dentro da função. Então, resumindo, passe dois parâmetros separados por vírgula, e no "while" coloque a condição que você quer para rodar o arco usando o nome do parâmetro que você recebeu. Se ficou confuso ou se não era exatamente essa a dúvida, dá o grito que tento de novo!

Não ficou confuso não, entendi! Muito obrigado André!