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().