Passando uma função como parâmetro para outra função em javascript

Uma coisa que é muito comum, com a popularização dos frameworks/bibliotecas javascript, é passar uma função como parâmetro para outra, e essa função ser executada depois de algum evento (finalizar uma requsição assíncrona ou acabar o drag"n drop de um elemento, por exemplo).

Mas, como funciona isso? Simples: no javascript, uma function é um Object do javascript. Com isso, ela pode ser passada como parâmetro com a mesma sintaxe de uma variável. Um bom exemplo é:

function myFunction() {
  //faz algo
}

function wrapper(parameter) {
 //faz algo
}

wrapper(myFunction);

No caso, passamos para a função wrapper a função myFunction como parâmetro.

Agora, como fazer para que essa função seja chamada dentro da função wrapper()? Toda função do javascript tem alguns métodos padrão. Um deles é o call(), que com que a função seja exetucada.

function wrapper(parameter) {
    parameter.call(); //executa parameter, que no caso é a função passada como parâmetro
}

Uma boa prática é checar se o parâmetro é mesmo uma função. Para isso, usamos a função typeof() que verifica o tipo do objeto:

function wrapper(parameter) {
    if(typeof(parameter)=="function")
        parameter.call();
}

Segue abaixo o exemplo completo do código para testes:

<html>
<head>
<title>Passando uma função como parâmetro para outra</title>
<script type="text/javascript">
function wrapper(parameter) {
    if(typeof(parameter)=="function")
        parameter.call();
}
function myFunction() {
    alert("teste");
}
wrapper(myFunction);
</script>
</head>
<body>
</body>
</html>

Ao rodar esse exemplo, deverá aparecer na tela um alert com o "teste" impresso.

No próximo post vou explicar como passar além da função outros parâmetros e fazer com que a função wrapper() reconheça os mesmos e repasse para a função myFunction().

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *