iwtraining

Já aprendemos que para criar uma função existem algumas sintaxes que podemos utilizar.

function minhaFuncao(){
     // faça algo
}
var minhaFuncao = function() {
     // faça algo
}

Nos dois casos citados acima, as funções são associadas a um nome que será utilizado para executa-las posteriormente. No entanto, no JavaScript, é possível criar funções anônimas.

function() {
     // faça algo
}

O exemplo acima é uma declaração de função totalmente válida, no entanto, não serve para muita coisa. Essa função foi declarada e perdida na memória, então que utilidade teria uma função anônima?

Vamos imaginar uma função que vai executar uma tarefa longa e que a sua aplicação não pode esperar que ela termine, deixando o usuário parado aguardando. Uma requisição para um servidor lento ou que retorne um volume grande de dados, por exemplo, pode causar sérios problemas para sua aplicação.

Nesses casos a boa prática diz que o processo deve ser iniciado e quando ele for finalizado, ou interrompido, que ele dispoare uma função com o processamento dos dados retornados, isso é muito comum com requisições XMLHttpRequests. Nesses casos, podemos passar funções anônimas como parâmetro.

var url = "http://localhost/muitos-dados.json";
http.onreadystatechange = function() {
 if(this.readyState == 4){
     if(this.status == 200){
       window.alert(this.responseText);
     }
   }
};
http.open("GET", url, true);
http.send(null);

Observe que no evento onReadyStateChange nós atribuímos uma função anônima como parâmetro.

Se a sua aplicação tiver uma função qualquer que precise que uma ação seja executada quando o processamento termine, seja lá quando for, podemos escrever algo como o código a seguir.

var minhaFuncao = function(dados, onReadyCallback) {
     var dadosProcessados = null;

     for (var i=0; i < dados.length; i++) {
        dadosProcessados.push(dados[i]+2);
    };

    if(typeof onReadyCallback !== “undefined”) {
         onReadyCallback(dadosProcessados)
     }
}

O minhaFuncao fará o seu trabalho para manipular os dados enviados como parâmetro, no entanto, a função que será executada ao final poderá se passada como parâmetro.

var meusDados = [//array gigante];
var proData = new minhaFuncao(meusDados, function(data){
      console.log(data);
});

Com essa possibilidade ficamos livres para usar a minhaFuncao para realizar qualquer operação com os dados processados por ela.

Dúvidas?

Aluno iwtraining tem acesso a um fórum exclusivo para discutir com os instrutores e outros alunos. Acesse agora mesmo!

Share this article

Em seus 12 anos de experiência, tanto em design como em desenvolvimento, trabalhou em diversos projetos, muitos de grande porte, para clientes como Banco do Nordeste, Sebrae, Anna Pegova, Grupo Deib Otoch, dentre outros. Como designer, trabalha com o Adobe Photoshop desde a versão 3.0, além do Illustrator, sendo certificado pela Adobe (ACE e ACI) nestes softwares. Como desenvolvedor, foca seus esforços atualmente no ActionScript 3.0 (Plataforma Flash) e Objective-C (iOS). Ministra, desde 2005, treinamentos na @iwtraining para estudantes e profissionais, além de grandes empresas como Cagece, TRE, TRT, Esmaltec, Grupo Edson Queiroz, Sebrae, Senac, Correios.

Posts Relacionados

Deixe um comentário