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

Usei "else if " para impedir o aumento infinito da bolinha.

Ao invés de retirar a variável raio da função, adicionei um else if para o valor do raio retornar a 10 . Só para constar.... Então sempre que declarada fora da função, a variável incrementada pela mesma volta ao valor inicial após o fim da função?

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

<script>
    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 indiceCorAtual = 0; // começa com blue

    function desenhaCirculo(evento) {

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

         if(evento.shiftKey){
            raio = raio+20;
         }
         else if (raio > 30){
            raio = 10;
         }

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




    }

    tela.onclick = desenhaCirculo;

    function mudaCor() {

        indiceCorAtual++;

        if(indiceCorAtual >= cores.length) {
            indiceCorAtual = 0; // volta para a primeira cor, azul
        }

        return false; // para não exibir o menu padrão do canvas
    }

    tela.oncontextmenu = mudaCor;

</script>
4 respostas
solução!

Oi Pedro tudo bem?

Tudo depende do escopo de como for declarar a variável.

Encontrei um artigo que explica direitinho isso https://medium.com/weyes/entendendo-o-uso-de-escopo-no-javascript-3669172ca5ba

Espero ter ajudado!!!

Então fazer o que fiz seria considerado uma boa prática, o artigo diz que em javascript devemos minimizar o uso de variáveis globais.]

''Minimizando a utilização de variáveis com escopo global Quando desenvolvemos aplicações ou sites em JavaScript é um boa pratica que sempre evitamos ou minimizamos ao máximo a utilização de variáveis globais, pois sua utilização pode acarretar em possíveis problemas em nosso código.

Pois, como já foi dito anteriormente quando criamos uma variável global, essa variável fica acessível em todo nosso código, e o principal problema nisso é que isso pode acarretar em problemas de colisão de nomes em nossos scripts, e dificulta na modularização.''

E meio que fica como intuitivo (pelo menos eu achei rsrrs), alem de se eu quiser mudar as condições que alteram ou retornam o valor da variável é só ir na função e mudar as condições.

Hum o interessante que não se pode criar variável dentro blocos de instruções, diferente do C. Interessante.

" Blocos no JavaScript não têm escopo É bom ressaltar que no JavaScript blocos de instruções como IF, FOR, WHILE etc. não criam seu próprio escopo como acontece em outros linguagem de programação que são semelhantes ao C, de forma como já foi dito anteriormente que no JavaScript somente existem dois tipos de escopos, que são eles escopo global e escopo local."

salvando artigo ^^, Obrigado.

Disponha e bons estudos!!!