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

Dúvida: Quando coloca var dentro da função o código dá erro

Olá, quando eu uso var para definir a variável numeroPensado (linha 15) dentro da função sorteia(), dá o seguinte erro: Uncaught ReferenceError: numeroPensado is not defined at sorteio.html:24

Ou seja, a variável numeroPensado não está definida fora da função, mas quando eu tiro o var o programa funciona corretamente. A minha dúvida é por que o simples fato de ter um var antes da variável faz com que ela não seja definida fora da função? É só uma curiosidade mesmo, já que o programar no fim funcionou.

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }    

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {
        n = parseInt(prompt("Qual o n? Responda de 0 à 100"));
        numeroPensado = Math.round(Math.random() * n);
        return numeroPensado;
    }


    sorteia();

    var chute = parseInt(prompt("Já pensei. Qual você acha que é?"));

    if(chute == numeroPensado) {
        mostra("Uau! Você acertou, pois eu pensei no " + numeroPensado);
    } else {
        if(chute < numeroPensado) {
            mostra("Você errou! Seu número era menor que o número pensado.");
        }
        if(chute > numeroPensado) {
            mostra("Você errou! Seu número era maior que o número pensado.");  
        }
        mostra("Eu tinha pensado no " + numeroPensado + ".");
    }

</script>
2 respostas
solução!

Oi, Johann, como vai?

Ótima pergunta!

No Javascript, as variáveis declaradas com var estão relacionadas com o contexto de execução quando elas são criadas (por exemplo, uma função), então, se elas forem criadas dentro de uma função, elas só poderão ser acessadas dentro da função ao qual foram criadas.

Exemplo:

function x() {
  y = 1;   
  var z = 2;
}

x();

console.log(y); // Mostrará o número 1, já que a variável foi definida com escopo global.
console.log(z); // Um erro será lançado dizendo que a variável z não foi definida.

Então, quando declaramos uma variável com var, essa variável só poderá ser acessada onde foi definida, já variáveis declaradas sem o var poderão ser acessadas em qualquer lugar do código.

Espero que essa explicação te auxilie.

Caso tenha quaisquer comentários ou dúvidas a respeito de alguma aula ou desafio, pode postar aqui no fórum que vamos te responder!

Abraços e bons estudos!

Nossa, que legal, entendi agora. Obrigado pela resposta!