2010
Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, leia este post primeiro. Vamos então aos exemplos.
Funções como argumentos
1 2 3 4 5 6 7 8 9 10 | function imprimir(fn) { var texto = fn(); alert(texto); } function gerador() { return 'Sou um texto!'; } imprimir(gerador); |
Neste primeiro exemplo, declaramos uma função chamada “imprimir” que espera como argumento uma outra função. Ela executa esta outra função, pega o seu retorno e passa ele como argumento de “alert”.
É importante perceber que na linha 10 “gerador” é passado como argumento sem os parênteses “()” no final. Ou seja, ela não está sendo invocada, somente passada. A execução da função ocorre na linha 2. Uma variação do nosso exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | function imprimir(fn) { var texto = fn('por'); alert(texto); } function gerador(lingua) { if (lingua === 'por') { return 'Sou um texto!'; } return 'I´m a text!'; } imprimir(gerador); |
Agora “gerador” espera um parâmetro “lingua”. Este parâmetro é passado por “imprimir” no ato da execução, linha 2.
Funções anônimas
O nome pode parecer estranho mas o conceito é bem simples: funções anônimas são funções que não tem nome:
1 2 3 4 5 6 7 8 9 10 11 | function imprimir(fn) { var texto = fn('por'); alert(texto); } imprimir(function(lingua) { if (lingua === 'por') { return 'Sou um texto!'; } return 'I´m a text!'; }); |
“Imprimir” continua sendo exatamente igual. Aguarda uma função como parâmetro. A diferença é que, ao invocarmos “imprimir”, declaramos uma função anônima ao mesmo tempo. Como ela não tem nome, não existe a possibilidade dela ser executada por uma outra função ou em outro momento do código. Somente “imprimir” a contém e pode executá-la.
E pra quê serve isso?
Funções como argumentos e funções anônimas são amplamente utilizadas como “callbacks”. Se você atrela um evento de click a um botão, algo deve acontecer quando este botão for clicado. Este “algo” é uma função. Ou então uma requisição Ajax. Vamos supor que temos uma requisição que busca se um determinado email já foi ou não cadastrado em um banco de dados. Quando a requisição finalmente termina, uma resposta é enviada ao nosso programa. Esta resposta é normalmente passada como argumento de uma função “callback”.
[...] This post was mentioned on Twitter by Thiago Retondar, Flávio Atas Medeiros. Flávio Atas Medeiros said: No blog: http://bit.ly/9OjjTE – Funções como argumentos e funções anônimas [...]
Excelente post, cara!
Continue assim!
Ola,
vi agora o teu post, eu tentei fazer em php igual o que postaste, e resulta. A minha duvida é se é a mesma coisa que em javascript ??
function imprimir ($fn) {
$texto = $fn(‘por’);
echo $texto;
}
imprimir(function($lingua){
if($lingua===’por’){
echo ‘ola mundo’;
}else{
echo ‘bla bla ‘;
}
});