3
respostas

Dúvidas sobre o código

Não entendi porque o meu código só funcionou depois que retirei a variável raio = 10 de dentro da função desenhaCirculo.

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

<script type="text/javascript">

        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle = 'grey';
        pincel.fillRect(0, 0, 600, 400 );

        var cores = ['blue', 'red', 'green'];
        var i = 0;

        var raio = 10;

        function desenhaCirculo(evento){

            var x = evento.pageX - tela.offsetLeft;
            var y = evento.pageY - tela.offsetTop;


            if(evento.shiftKey){

                raio = raio + 10;
            }

            pincel.fillStyle = cores[i];
            pincel.beginPath();
            pincel.arc(x,y, raio, 0, 2*3.14);
            pincel.fill();
            console.log(x + ',' + y);
        }

        function mudaCor(evento){

                i++;

                if(i >= cores.length){
                    i = 0;
                }
                return false;

        }

        tela.onclick = desenhaCirculo;
        tela.oncontextmenu = mudaCor;

</script>
3 respostas

Boa noite Vitor,

Fiz um teste e o código funciona mesmo com essa variável dentro da função desenhaCirculo, você pode ver aqui.

Faria diferença se tivéssemos uma variável raio dentro e outra variável raio fora da função. Quando solicitamos o uso de uma variável dentro de uma função ela tentará utilizar uma variável com aquele nome que esteja dentro da função, caso ela não encontre ela procura no "escopo" acima, ou seja, fora daquela função.

Escopo de variáveis.aspx) é um assunto muito importante em todas as linguagens que vale muito a pena aprender.

Abraços

Vinícius, mesmo no seu código o circulo não faz o incremento de +10 a cada vez que segura o shift

Nem tinha notado que o código fazia isso, achei que ele só desenhava o circulo.

Nesse caso o local onde a variável é declarada faz diferença sim. Se colocarmos ela dentro da função sempre que a função for chamada a variável raio vai ser iniciada com 10, então se segurarmos o shift ela se transforma em 20, e como ela está declarada dentro da função a cada click ela volta a ser 10.

Porém se colocarmos ela fora da função ela se torna uma variável global e aí conseguimos adicionar 10 a variável a cada click do mouse e assim fazendo um circulo cada vez maior.

Agora com a variável fora da função ela acumula os +10 e cria círculos com raios maiores.