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

Dúvida no Desafio Final

Amigos,

Coloquei as minhas dúvidas como comentário dentro do script. Alguém poderia me ajudar por favor ?

<canvas id="tela" width="600" height="400"></canvas>

<script>
var raio = 10;
var alvoX;
var alvoY; <----- Variavel sem valor declarado correto ? 

var desenha = function() {
  limpa();
  alvoX = sorteia(600);                <----- Aqui nesta função, ela invoca o sorteia, que por sua vez atribui um valor a variavel alvoX certo ? 
  alvoY = sorteia(400);
  desenhaAlvo(alvoX, alvoY);
};

setInterval(desenha, 3000);

tela.onclick = function(evento) {
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;

    if((x > alvoX - raio) && (x < alvoX + raio) &&  <---- Aqui, o valor atribuido na variavel ao longo do script, é o mesmo que o declarado la no começo (ou seja sem valor) ou é o valor que ele assumiu na função desenha, independente do tela.onlick não estar o chamando ?
        (y > alvoY - raio) && (y < alvoY + raio)) {
            alert("acertou!");
    }
}
</script>
6 respostas
solução!

Boa pergunta!

Se o desenha foi chamado antes do clique na tela, o valor será o valor sorteado. Se o desenha ainda não foi chamado nenhuma vez, a variável ainda estará undefined. O setInterval só vai chamar o desenha depois dos primeiros 3000 milissegundos. Então se você clicar na tela antes disso, vai haver esse problema da variável sem valor.

Para evitar essas dúvidas e casos particulares onde variáveis estão sem valor definido, é comum sim atribuirmos valores padrão, como zeros ou números simbólicos, nesses casos.

Paulo,

Primeiramente obrigado pela resposta. Só para esclarecer melhor:

"Se o desenha foi chamado antes do clique na tela, o valor será o valor sorteado. "

Dúvida: Ou seja eu posso atribuir um valor a uma variavel, de dentro de um function, mesmo a variavel estando declarada fora do function ? Logicamente tipo isso:

var x;

Qual o valor de x ?
R: undefined

function sorteia(){
    x = 1;
}

sorteia();

Qual o valor de x ?
R: 1

Obrigado. Vitor

Vitor,

exatamente, estas variáveis declaradas fora das functions são variáveis "globais" do seu script. Sendo assim, você pode usa-las em todo o escopo do seu script.

Legal observar, que o contrario (variável definida dentro de uma função) não permitiria que outras partes do seu script usassem a mesma.

Obrigado Guilherme e Paulo. Que mão na roda !!! Eu não sabia disso rsrs.

Abraços Vitor

É exatamente o que o Guilherme falou.

Em muitas linguagens, uma variavel declarada no escopo mais de fora é visível no escopo mais interno. O contrário não. Aí pinta uma vontade de usar todas as variáveis no escopo mais de fora possível, conhecido em alguns casos como global, mas com o tempo você vê que isso gera mais dor de cabeça do que ajuda.... e é melhor separar bem os contextos das variáveis para elas serem o mais local possível. Isso exige prática.

Vlw Paulo !!