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

Chamada de função sem parenteses

Olá, estava realizando um exercício com canvas e me deparei com a seguinte dúvida no meu código com relação a chamada de funções pelo JavaScript.

<meta charset="utf-8" />

<canvas width="600px" height="400px" id="tela"></canvas>

<script>
    var tela = document.getElementById("tela");
    var c = tela.getContext("2d");
    c.fillStyle = "Blue";
    c.fillRect(0, 0, 600, 400);

    function limpaTela() {
        c.clearRect(0, 0, 600, 400);
    }

    function desenhaCirculo(x, y, cor) {
        limpaTela();
        c.fillStyle = cor;
        c.beginPath();
        c.arc(x, y, 15, 0, (2 * Math.PI));
        c.fill();
    }

    var x = 1;

    function desenha() {
        desenhaCirculo(x, 100, "blue");
        x = x + 1;
    }

    setInterval(desenha, 30);
</script>

Quando eu chamo uma função o método mais tradicional: desenha(), por exemplo ela funciona perfeitamente. Agora quando eu vou fazer a chamada da função dentro de outra função do JavaScript ela não aceita a passagem de parâmetros. Ex:. setInterval(desenha(200, 400), 30); não funciona. Eu tenho que chamar a função da forma acima para que a função seja executada, sem poder passar nenhum valor como parâmetro. Porque isso acontece? É padrão da linguagem?

4 respostas

Já tentou criar uma função anonima dentro dentro ou inverter as passagens?

solução!

Oi Luiz. Uma forma de contornar esse problema é passar uma simples função anônima chamando a função desejada:

    function limpaTela() {
        c.clearRect(0, 0, 600, 400);
    }

    function desenhaCirculo(pontoX, pontoY, cor) {
        limpaTela();
        c.fillStyle = cor;
        c.beginPath();
        c.arc(pontoX, pontoY, 15, 0, (2 * Math.PI));
        c.fill();
    }

    var pontoX = 1;
       var pontoY = 1;

 function desenha(pontoX,pontoY) {
        desenhaCirculo(pontoX, pontoY, "blue");
    }

  setInterval(function() {
    desenha(pontoX,pontoY);
pontoX = pontoX + 1;
pontoY = pontoY + 1;}, 30);

Ok, obrigado pela ajuda Maison! Mas no caso não tem mesmo como fazer a passagem de parâmetros pela chamada de função tradicional né? Tem que ser uma função anonima.

Isso Luiz quando passamos a função por referência temos a impossibilidade de passar parâmetros.

Ex:.

// Passando referências

setTimeout(desenha, 1000);

Solucionamos isso usando a função anonima.