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

Dúvida

por que a variável booleana TROCAR só funciona se colocar ela fora da função trocarBandeira? a condição está dentro da função, essa condição usa a variável trocar deveria poder coloca-la dentro também.

E sim, eu sei que tudo dentro da função só existe dentro da função.

tem como saber quando colocar fora e quando colocar ela dentro de uma função?

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

<script>

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

    pincel.fillStyle="green";
    pincel.fillRect(0, 0, 600, 400);

    pincel.fillStyle="yellow";
    pincel.beginPath();
    pincel.moveTo(300, 50);
    pincel.lineTo(50, 200);
    pincel.lineTo(550, 200);
    pincel.fill();

    pincel.beginPath();
    pincel.moveTo(50, 200);
    pincel.lineTo(300, 350);
    pincel.lineTo(550, 200);
    pincel.fill();

    pincel.fillStyle="darkblue";
    pincel.beginPath();

    pincel.arc(300, 200, 100, 0, 2* 3.14);
    pincel.fill();
}


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

    pincel.fillStyle = 'black';
    pincel.fillRect(0, 0, 600, 133);

    pincel.fillStyle = 'red';
    pincel.fillRect(0, 133, 600, 133);

    pincel.fillStyle = 'yellow';
    pincel.fillRect(0, 266, 600, 133);
}

var trocar = true;

function trocaBandeira()
{

    if(trocar)
    {
        desenhaBandeiraBrasil();
    }
    else
    {
        desenhaBandeiraAlemanha();
    }

    trocar = !trocar;
}

setInterval(trocaBandeira, 2000);
2 respostas

Olá Shayron,

Nesse caso a variável está em um escopo global e pode ser acessada por todas as funções do código. Porém, como você mesmo mencionou, nesse caso ela poderia ter sido declarada em um escopo local, ou seja, dentro da função, uma vez que ela é utilizada apenas dentro da função trocaBandeira().

A única maneira de você saber se deve declarar uma função em um escopo global ou local é avaliando a necessidade de acesso dela por outras funções. Nesse caso a variável foi declarada como global mesmo sendo acessada por apenas uma função, não há problemas quanto a isso, porém, se outras funções precisassem acessar essa variável e ela tivesse sido declarada dentro de um função (escopo local), certamente teríamos um problema de acesso no código, pois a outra função que precisaria acessar a variável não teria visibilidade dela.

solução!

Se variável trocar ficar dentro da função trocaBandeira() o valor irá ser sempre TRUE. Isso só irá mostrar a bandeira do Brasil.

colocando ela fora da função como escopo global é possível mudar o valor dela no escopo local, o que possibilita a troca de bandeira.

É isso que acontece?