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

Passagem de função com e sem parênteses

Fala comunidade! Bom dia, tarde ou noite!

Nesta parte do curso de Javascript estou o professor apresentou um caso em que ele chama uma função sem os parênteses. Vou dar um exemplo:

function exemplo123 () { xxxxxxx }

var teste = exemplo();
var teste1 = exemplo;

Ele explicou que, no primeiro caso, ou seja, com parênteses, estamos passando o valor da função. No segundo caso (sem parênteses) estamos passando a função.

Essa diferença não ficou clara para mim. Alguém pode me explicar? Ou me indicar um material específico para leitura?

Valeu

3 respostas
solução!

Bom dia Júlio,

vou tentar deixar mais claro, usando esse mesmo exemplo que você deu apenas alterando para que a função exemplo retornando uma string ‘ola’:

function exemplo () { return "ola"; }

var teste = exemplo();
var teste1 = exemplo;

Após executar esse exemplo, o valor da variável teste será a string retornada pela função: ola

Já a variável teste1 será a função exemplo

Se logar as variáveis no console vai poder ver a diferença:

console.log(teste);
ola
console.log(teste1); 
ƒ exemplo() { return "ola"; }

Como a variável teste1 é uma função ela pode ser executada:

var temp = teste1();

console.log(temp);
ola

Quando usamos os parênteses estamos executando a função, como no caso acima a variável teste ficou com o valor retornado da função, já quando não utilizamos os parênteses estamos passando a própria função e não seu valor.

Espero que tenha ajudado, se ficou com dúvidas não deixe de questionar.

Abraço.

Excelente explicação Alex. Muito esclarecedora e ajudou muito. Eu evolui meu conhecimento mas me deparei com outro questionamento. Com o que eu aprendi até agora não consegui perceber a utilidade de uma função passada sem "(xxx)". Consegue me dar um exemplo?

Não costumo ver muito a utilização de funções nomeadas desta forma, normalmente o que vejo é o uso de funções anônimas. Você já deve ter visto no curso a questão de eventos nos elementos HTML, pois bem:

Uso de função anônima que é o mais comum:

botao.onclick = function() {
    // executa lógica
};

Uso de uma função nomeada:

var executaCalculo = function() {
    // executa lógica
};

botao.onclick = executaCalculo;

Um exemplo não muito útil mas que serve para demonstrar seria você ter dois botões e querer executar a mesma lógica quando clicar neles, se você usar uma função anônima teria que repetir a lógica:

Função anônima

botao1.onclick = function() {
    // executa lógica
};
botao2.onclick = function() {
    // executa a mesma lógica, repetição de código
};

Uso de uma função nomeada:

var executaCalculo = function() {
    // executa lógica
};

botao1.onclick = executaCalculo;
botao2.onclick = executaCalculo; // assim reaproveita a função

O importante nesse caso é você entender como funciona, pois algum dia você pode precisar.