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

Argumento de uma função

Minha dúvida está no código que desenha pontos de 3 cores diferentes na tela, do curso de lógica de programação II:

<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;
        pincel.fillStyle = cores[indiceCorAtual];
        pincel.beginPath();
        pincel.arc(x, y, 10, 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>

Minha dúvida é referente ao array cores e à função desenhaCirculo. Para trocar as cores do círculo desenhado, na função desenhaCirculo, pincel.fillStyle recebe o array cores com a variável indiceCorAtual atuando como índice do array. O que me deixou confuso foi: como a função teve acesso a esse array se ele não foi passado a ela como argumento? E de mesmo modo a variável indiceCorAtual, que também não é passada como argumento à função, já que ambos foram declarados fora da função.

2 respostas
solução!

Alessandro, as variáveis são acessadas de fora das funções porque são declarações globais. Na verdade temos que tomar cuidado com declarações de variáveis com escopo global pois tem acesso de todas as funções além de deixar a página com lentidão. Espero ter ajudado. Se ajudei, marque a dúvida como solucionada. Obrigado!

Muito obrigado Murilo Ramos Parra, entendi!