Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
14
respostas

Dúvida no Ex. 7 da Aula 3 - Pratique resolvendo problemas do seu dia a dia

Boa noite,

Uma duvida ao declarar uma função qual a forma correta:

var minhaFuncao = function ( ){ bloco de codigo; };

ou

function minhaFuncao( ){ bloco de codigo; };

Nos dois casos ao precisar usar a função criada eu irei chama-la da mesma forma, mas qual a maneira correta de usar , eu particulamente acho que a segunda opção é a mais correta mas o curso ensinou a outra.

14 respostas

Ola, João Paulo Souza !

Você esta corretissssssimo qndo diz que ambas são corretas.

Em relação a como criar, depende do que vc precisa fazer.

Se precisa criar uma função e mais tarde passar para outra função:

var minhaFuncao = function ( ){ bloco de codigo; };

Se é uma função que vai ser usada somente chamando ela diretamente:

function minhaFuncao( ){ bloco de codigo; };

Abraço!

Boa tarde,

Muito obrigado pela resposta mas tenho uma outra dúvida, no primeiro caso quando crio uma variável para receber a função estou criando uma variável logo reservando espaço em memória para essa variável quando eu chamar essa função no programa eu posso ou não atribuir a outra variável caso queira armazenar o retorno desta função para aquela chamada, logo, terei dois armazenamentos em memoria, no segundo caso não eu escrevo a função e a deixo paradinha no script quando preciso usa-lá a invoco atribuindo a uma variável ou não, usando assim o armazenamento em memória uma vez para esta chamada, claro que estamos falando de um espaço irrelevante mas gostaria de saber se minha linha de raciocínio está correta ou não, o que você acha Cristiano de Oliveria?

Att.

Boa noite Cristiano de Oliveira , mais uma vez na aula posterior a essa que surgiu a dúvida tive a oportunidade de testar as duas opções que estávamos discutindo nesse registro, em um exercício testei trocar a forma de declaração da função e pude notar que em certos casos como na action de um botão em um script se declarar a função sem atribuir a variável o programa assim que lido irá executa-lá o que pode trazer um resultado inesperado, pois está só deve ser chamada ao clique do botão.Nesse caso a declaração atribuindo a uma variável é mais indicada, caso a chamada da função esteja fixa direto no html no atributo onclick do botão esta função poderá ser apenas declarada sem atribuição a uma variável, pois a chamada da mesma só será feita após o clique do botão.

Att.

Boa noite, parece brincadeira mas me surgiu uma nova dúvida ainda referente a forma de declarar funções no Javascript, no dois scripts:

E

O segundo tem um comportamento totalmente diferente por causa dos " ( )" parenteses na chamada da função, quando os parenteses são adicionador a chamada da função a mesma não obedece o evento onclick do Javascript e é executado imediatamente.Alguém sabe o pq?

Att.

Como edito meus posts o post anterior não era dessa forma.

Att.

E ae João, blz ?

Poderia postar esses dois exemplos que vc testou ?

Abraço!

Sim claro eu os tinha postado mas sei lá apareceu só os comentários não o script mas aqui vão eles.

e

Podemos notar que a unica mudança são os () parenteses ao fim do código que mudam totalmente quando executamos o mesmo.

Att.

Estou tentando postar o código mas o campo para resposta esta interpretando o script, e quando clico em responder ele vem vazio. Como post códigos aqui?

Att.

Joao !

Na janela que que vc digita o texto para postar, do lado direito tem dois botoes, [Expandir] [Formatar].

Da uma olhadinha no formatar que tem umas dicas de como postar o código e ele sair bem formatadinho.

<_meta charset="UTF-8">

<_input type="text" id="numero" />

<_input type="submit" value="Compare com o meu segredo"id="botao"/> <_script>

segredo = [8,9,10,11];

var caixaDoNumero = document.getElementById("numero");

var acertou = false;

function botaoClicado(){

for ( var x = 0; x < segredo.length; x++){ if( segredo[x] == caixaDoNumero.value ){ acertou = true; break; }; }; if(acertou == true){ document.write("Parabéns você acertou"); }else{ alert("Opa errou"); }

};

var botaoAdivinhar = document.getElementById("botao");

botaoAdivinhar.onclick = botaoClicado;

<_/script>

Se na ultima linha colocarmos um () parenteses assim, ocorre o comportamento indesejado.

botaoAdivinhar.onclick = botaoClicado ();

Acho que consegui rsrss.

Joao.

Quando chamamos o método assim:

botaoClicado ();

Estamos pedindo para ele executar esse método.

Quando atribuímos dessa forma:

botaoAdivinhar.onclick = botaoClicado ();

Estamos falando que somente ao executar o:

onclick

é para ele executar o método

botaoClicado ();

Abraço!

Boa tarde,

Mas ele só obedeçe se tiramos os (), caso esses sejam deixados ele executa o método no momento em que o script é lido pelo browser.

botaoAdivinhar.onclick = botaoClicado ();--> browser vai executar instantaneamente, resultado inesperado.

botaoAdivinhar.onclick = botaoClicado ; --> espera o evento do botão.

Att.

solução!

Muito bem Observado, Exatamente isso João !

Quando vc usar o () ele vai executar, pq estamos mandando que ele execute instantaneamente o método.

Quando não usamos o () estamos falando para ele executar, SOMENTE ao clicar no botão.

Estamos atribuindo o click do botão a esse método.