Dans JS, vous rencontrez souvent des situations où d'autres fonctions sont appelées dans des fonctions. À l'heure actuelle, il y aura une méthode d'appel comme fn (), et une autre est une méthode d'appel comme return fn (). Certains débutants sont souvent confus par ces deux méthodes. Ici, nous utilisons une élégante question d'entrevue pour analyser les différences entre les deux méthodes.
var i = 0; fonction fn () {i ++; if (i <10) {fn (); } else {return i; }} var result = fn (); console.log (résultat);Ceci est une question d'entrevue avec des pièges cachés. Cela semble très simple. La plupart des gens peuvent répondre 10 sans réfléchir. En fait, on peut voir que ce qui est imprimé n'est pas défini. Cette question de piège reflète intuitivement le problème mentionné ci-dessus. Lorsque nous modifions la ligne exécutant FN à:
var i = 0; fonction fn () {i ++; if (i <10) {return fn (); } else {return i; }} var result = fn (); console.log (résultat);Pour le moment, vous constaterez que le résultat imprimé est de 10.
Pourquoi y a-t-il une si grande différence entre l'ajout ou ne pas ajouter un retour ici?
La raison principale ici est très simple. Les fonctions JavaScript ont des valeurs de retour par défaut. Si la fonction n'écrit pas de retour à la fin, un non-défini sera renvoyé par défaut. C'est pourquoi dans la console chromée, lors de l'écriture de code, une ligne de non définie apparaît souvent ci-dessous.
Examinons de plus près cet exemple. Lorsque j'augmente à 9, c'est la deuxième fois que le FN est appelé récursivement pour l'avant-dernier temps. S'il n'y a pas de retour, après l'exécution de FN cette fois, rendez-vous non défini par défaut, et la prochaine récursivité ne se poursuivra pas. Lorsque le retour est ajouté, la dernière récursivité se poursuivra ici, c'est-à-dire lorsque i = 10, sautez dans Else and Return pour obtenir le 10 correct.
En parlant de cela, nous pouvons prolonger un exemple plus classique, la célèbre méthode de recherche binaire :
var mid = math.floor ((arr.Length - 1) / 2); Fonction Search (n, mid) {if (n> arr [mid]) {mid = math.floor ((mid + arr.length) / 2); Return Search (n, mid); } else if (n <arr [mid]) {mid = math.floor ((mid - 1) / 2); Return Search (n, mid); } else {return mid; }} var index = search (n, mid); console.log (index);La méthode de recherche binaire nécessite également plusieurs appels récursifs. De nombreux débutants font souvent des erreurs lors de la mise en œuvre de cet algorithme pour la première fois. Il s'agit d'oublier d'ajouter un retour avant la fonction récursive, ce qui entraîne finalement le résultat de retour non défini. La raison ici est similaire à la précédente. Si vous n'ajoutez pas de retour, cela vous fera retourner non défini directement après la récursivité, et vous ne continuerez pas avec la prochaine récursivité.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.