2
respostas

Dúvida sobre variável "tela" e "pincel".

Olá! Eu utilizei a estrutura "while" para preencher automaticamente os 3 quadrados e criei um condição "if" para desenhar o último em branco. Lembrando que poderíamos, também, desenhar o texto na própria HTML com as tags abaixo: <"h1>Que Fração é essa?(Sem as aspas duplas). Mas minha dúvida é o seguinte: Por que precisamos declarar novamente as variáveis tela e pincel dentro da função "desenhatexto"?

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

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

    function desenhaquadrado (x, y, collor){
        pincel.fillStyle = collor;
        pincel.fillRect(x, y, 50, 50);
        pincel.fillstroke = 'black';
        pincel.strokeRect (x, y, 50, 50);
    }
    function desenhatexto (texto, x, y){
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');
        pincel.font = '20px Georgia';
        pincel.fillStyle = 'black';
        pincel.fillText (texto, x, y);
    }
    var x = 0
    while (x < 150) {
        desenhaquadrado(x, 50, 'green');
        x = x + 50;
    }
    if(x = 150){
            desenhaquadrado(x,50,'white');

        }

     desenhatexto ('Que Fração é essa?', 20,25);

</script>
2 respostas

Olá, Tudo bem?

Não precisa declarar novamente, tente fazer o teste sem declarar que vai funcionar do mesmo jeito. Elas foram declaradas fora das funções, portanto são variáveis globais.

Bom Dia, tudo bem? Nós precisamos redeclarar as variáveis pois nem todas as vaiáveis são globais, o que quer dizer que elas nem sempre podem ser usadas por todas as funções do seu código, quando declaramos uma variável dentro de uma função ela só ira se aplicar para esta função, por isso precisamos declará-las de novo, pois as outras funções não sabem de sua existência. Só para complementar você deve estar se perguntando: Ma por que não declaramos todas a s variáveis como globais e pronto? Pois em certos casos é melhor e mais prático usarmos variáveis estratégicas do que globais. Por exemplo:

\*Aqui temos um código que usamos variáveis globais *\
var nome = "Cauê"

Se quisermos referenciá-la, o nome será sempre Cauê não é mesmo? Beleza, então queremos criar um novo nome. Se a variável é global, teremos que criar uma nova, mas se ela foi posicionada corretamente podemos usá-la novamente.

var nome = "João" 

Nesse pequeno código não irá fazer muita diferença, mas imagine em um código com milhares, milhões de variáveis, fica bem mais fácil usar apenas uma estrategicamente do que ter que criar e pensar com uma infinidade de variáveis diferentes não é mesmo. Fica a dica;)