Olá, Lorenzo! Tudo bom contigo?
Antes de tudo, agradeço a paciência em aguardar uma resposta!
Uma função que é passada como parâmetro de outra função denomina-se callback. Um exemplo desse tipo de função ocorre no código estudado na aula 4:
setInterval(atualizaTela, 10);
atualizaTela
é uma função callback, já que é parâmetro da função setInterval()
.
No entanto, notou que atualizaTela
está sem parênteses e não possui parâmetros? Isso ocorre devido à natureza assíncrona de uma função callback. A palavra assíncrono faz referência a algo que não ocorre instantaneamente.
Enquanto alguns comandos em Javascript ocorrem de maneira linear, outros, por sua vez, não. As callbacks só serão executadas em cenários específicos, isto é, quando a nossa função realmente determinar isso. Portanto, callbacks garantem que uma função não seja executada antes que uma outra tarefa seja concluída, mas somente depois de algo ser finalizado.
Por esse motivo, não é possível passar como parâmetro uma função que já possui parâmetros, uma vez que, desta maneira, perderíamos o sentido do código assíncrono (quando chamamos uma função com seus parênteses, desejamos que ela seja executada naquele mesmo instante).
Exemplificando:
<script>
function mostraSaudacao(nome) {
alert('Olá ' + nome);
}
function processarResposta(callback) {
var nome = prompt('Por favor, insira seu nome.');
callback(nome);
}
processarResposta(mostraSaudacao);
</script>
No código acima, passamos a função mostraSaudacao
como parâmetro de processarResposta()
. mostraSaudacao
somente é executada após o usuário digitar alguma coisa e esse valor será atribuído à var nome
.
Caso fosse passado algo como parâmetro de mostraSaudacao
, essa função seria executada antes de tudo, inclusive da função processarResposta()
.
Caso tenha dúvidas acerca da minha resposta ou ao decorrer dos seus estudos na plataforma, lembre-se que pode enviá-las ao fórum. Ficarei super feliz em te ajudar no que for preciso!
Abraços, Lorenzo!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado! ✓.