Passe a função como um parâmetro para outra função. Esta função é chamada de função de retorno de chamada
É frequentemente encontrado nessa situação que as camadas A e B de um projeto são concluídas por diferentes pessoal em colaboração. A camada A é responsável pela função FUNA e a camada B é responsável pelo Funcb. Quando a camada B deseja usar os dados de um determinado módulo, ele disse à equipe de uma camada que eu preciso que você forneça dados que atendam a certas necessidades e você me forneça uma interface.
A equipe no nível A disse: Fornecerei dados e como exibir e processar os negócios da B.
Obviamente, a camada B não pode fornecer uma interface de dados para todos os requisitos. B fornece uma interface para passar. B obtém os dados e, em seguida, B grava a função para exibi -los.
Ou seja, você precisa trabalhar com outras pessoas e outras pessoas fornecem dados e não precisa se concentrar em como os outros obtêm ou criam dados. Você só precisa operar com os dados obtidos. Você precisa usar uma função de retorno de chamada neste momento
Portanto, os retornos de chamada são essencialmente um padrão de design, e os princípios de design do jQuery (incluindo outras estruturas) seguem esse padrão.
Um exemplo de uso de retornos de chamada em sincronização (bloqueio) é executar o Func2 após a execução do código Func1.
A cópia do código é a seguinte:
var func1 = function (retorno de chamada) {
// Faça algo.
(retorno de chamada && typeof (retorno de chamada) === "function") && callback ();
}
func1 (func2);
var func2 = function () {
}
Exemplo de retornos de chamada assíncronos:
A cópia do código é a seguinte:
$ (document) .ready (retorno de chamada);
$ .ajax ({
url: "test.html",
Contexto: document.body
}). Done (function () {
$ (this) .Addclass ("feito");
}). Fail (function () {
alerta ("erro");
}). sempre (function () {
alerta ("completo");
});
Observe que a solicitação do Ajax é de fato assíncrona, mas essa solicitação é solicitada pelo navegador. Quando o status da solicitação for alterado, se um retorno de chamada já foi definido antes, o encadeamento assíncrono gerará um evento de mudança de estado e o colocará na fila de processamento do mecanismo JavaScript para aguardar o processamento. Veja: http://www.phpv.net/html/1700.html
Quando o retorno de chamada será executado
As funções de retorno de chamada geralmente são executadas por último em uma situação síncrona, mas não podem ser executadas em uma situação assíncrona porque o evento não é acionado ou as condições não são atendidas.
Use casos de funções de retorno de chamada
Carregamento de recursos: Execute o retorno de chamada após o carregamento dinâmico de arquivos JS, execute o retorno de chamada após o carregamento do IFRAME, execute o retorno de chamada após carregar o retorno de chamada da operação do AJAX, execute retorno de chamada após carregamento da imagem, Ajax, etc.
Os eventos DOM e os eventos Node.js são baseados no mecanismo de retorno de chamada (os retornos de chamada do Node.js podem ter problemas de ninho de retorno de chamada de várias camadas).
O tempo de atraso do setTimeout é 0. Este hack é frequentemente usado. A função chamada pelo setTimeout é na verdade uma modalidade de retorno de chamada
Chamada de cadeia: Quando a chamada em cadeia, é fácil implementar a chamada de cadeia no método do avaliador (setter) (ou em métodos que não retornam valores), mas o valor getter é relativamente difícil de implementar a chamada de cadeia, porque você precisa do valor getter para retornar os dados necessários em vez desse ponteiro. Se você deseja implementar o método da cadeia, pode usar uma função de retorno de chamada para implementá -lo.
As chamadas de função do setTimeout e SetInterval obtêm seu valor de retorno. Como ambas as funções são assíncronas, ou seja, o tempo de chamada e o principal processo do programa são relativamente independentes, não há como esperar o valor de retorno no corpo, e o programa não parará e espera quando eles forem abertos, caso contrário, o significado do setTimeout e do setInterval será perdido. Portanto, não faz sentido usar o retorno, portanto, o retorno de chamada só pode ser usado. O significado do retorno de chamada é notificar a função de proxy dos resultados da execução do timer para processamento oportuno.
Eu deveria ter algumas informações coletadas on -line e entendi. Vou resolver um exemplo sozinho:
A cópia do código é a seguinte:
função diversão (num, retorno de chamada) {
if (num <0) {
alerta ("Chame a função de nível A para manusear!");
alerta ("Os dados não podem ser negativos, erro de entrada!");
} else if (num == 0) {
alerta ("Chame a função de nível A para manusear!");
alerta ("Este item de dados não existe!");
}outro{
alerta ("Ligue para o nível B para processar!");
retorno de chamada (1);
}
}
function test () {
var num = document.getElementById ("score").
Fun (num, função (traseira) {// Função de processamento da camada B anônima
alerta (":"+volta);
se (num <2)
alerta ("número é 1");
caso contrário, se (num <= 3)
alerta ("o número é 2 ou 3!");
outro
alerta ("número maior que 3!");
})
}
Quando a função começar a executar a diversão, primeiro vá para determinar se o NUM é um número negativo ou zero, caso contrário, execute o alerta da função de processamento da camada B (":"+traseira); Saída 1 e determine como <2, <= 3,> 3, etc.
Dicas de experiência:
É melhor garantir que o retorno de chamada exista e deve ser uma referência de função ou expressão de função:
(retorno de chamada && typeof (retorno de chamada) === "function") && callback ();
A cópia do código é a seguinte:
var obj = {
init: function (retorno de chamada) {
//PENDÊNCIA ...
if (retorno de chamada && typeof (retorno de chamada) === "function") && retorno de chamada ()) {
retorno de chamada ('init ...'); // retorno de chamada
}
}
Finalmente, sobre por que você precisa usar uma função de retorno de chamada? A metáfora a seguir é muito vívida e interessante.
Se você tem algo para fazer, vá ao próximo dormitório para encontrar um colega de classe e descobrir que a pessoa não está lá, o que você deve fazer?
Método 1: vá para o próximo dormitório a cada poucos minutos para ver se a pessoa está lá
Método 2: ligue para alguém no mesmo dormitório com ele e ligue para você quando o vir voltar
O primeiro está pesquisando, e o último é um retorno de chamada.
Então você diz: posso esperar diretamente no dormitório ao lado até que meus colegas de classe voltem?
Sim, mas dessa maneira, você poderia ter economizado tempo para fazer outras coisas, mas agora precisa desperdiçá -lo na espera. Transforme a chamada assíncrona não bloqueadora original em uma chamada síncrona de bloqueio.
Os retornos de chamada JavaScript são usados em cenários de chamada assíncronos, e o desempenho do uso de retornos de chamada é melhor que a pesquisa.
Um pouco mais simples:
"Estou saindo agora e vou notificá -lo quando estiver aqui."
Este é um processo assíncrono. Durante o processo de "eu vou" (execução da função), "você" pode fazer qualquer coisa ", chega" (a execução da função é concluída) e "notificar você" (retorno de chamada) após o processo de "notificar você" (retorno de chamada) é realizado