recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Quelle est la différence entre une fonction de rappel et une fonction d'appel normale?

La définition d'une fonction de rappel est de passer la fonction b comme paramètre à a pour exécution. À ce stade, b est la fonction de rappel, j'ai soudainement une question, quelle est la différence entre elle et l'appel de b directement dans la fonction a ?
J'ai moi-même écrit une démo

function a(){
    b();
    console.log('hello world');
}
function b(){
    var n = 0;
    for(var i = 0;i < 1000000000;i++){
        n++;
    }
    return n;
}
a(); //hello world

Il faudra environ 3 secondes pour voir le résultat de sortie, puis le réécrire sous la forme d'une fonction de rappel

function a(callback){
    callback.call(this);
    console.log('hello world');
}
function b(){
    var n = 0;
    for(var i = 0;i < 1000000000;i++){
    }
    console.log(1);
}
a(b); //hello world

Le résultat de la sortie ne peut être vu qu'après 3 secondes
J'ai trouvé de nombreux articles, qui expliquent tous que lorsque b est exécuté en tant que fonction de rappel de la fonction a, cela n'entrave pas l'exécution normale de la fonction a selon cette logique. , la deuxième méthode devrait être immédiatement Lorsqu'elle affiche hello world, est-ce parce que j'ai utilisé la mauvaise fonction de rappel ? Vous avez toujours du mal à comprendre ?

欧阳克欧阳克2741 Il y a quelques jours1427

répondre à tous(2)je répondrai

  • 淡淡烟草味

    淡淡烟草味2017-06-26 10:55:07

    1. Il n'y a aucune différence de performances
    2. La fonction de rappel est passée en paramètre et l'opération est plus flexible. Par exemple, vous pouvez définir une fonction c, qui peut être exécutée
    b(c), lorsque vous le faites. exécutez la fonction dans la fonction, la flexibilité variable est perdue.

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-26 10:55:07

    Eh bien, vous avez mal compris, l'effet d'appeler est le même. Et callback.call(this); 画蛇添足,跟 callback() c’est pareil.

    L'avantage des rappels est l'inversion des dépendances. Vous pouvez laisser un appel c, d, e sans modifier le code de a...

    répondre
    0
  • Annulerrépondre