Dans l'article précédent, nous vous avons présenté l'utilisation des fonctions récursives en JavaScript, puis lorsque nous utilisons les fonctions récursives en JavaScript , il y aura Il y aura quelques problèmes. Aujourd'hui, je vais vous donner un exemple pour présenter le problème des fonctions récursives en JavaScript !
Définissez d'abord une fonction récursive pour trouver la factorielle d'un entier positif N :
function factorial(num){ if(num<=1) return 1; return num*factorial(num-1); }
Définissez ensuite une autre variable pointant vers cette fonction, puis définissez la fonction sur null
var anotherFactorial=factorial; factorial=null; alert(anotherFactorial(4));//报错
Pourquoi une erreur est-elle signalée ? Parce qu'à l'intérieur de la fonction factorielle, la factorielle elle-même est appelée de manière récursive et le code ci-dessus définit la factorielle sur null, ce n'est donc plus une fonction. Cela peut paraître un peu étrange, mais c'est ainsi que JavaScript le gère en interne. Comment résoudre ce problème ? Une solution consiste à remplacer la fonction elle-même par arguments.callee à l'intérieur de la fonction
function factorial(num){ if(num<=1) return 1; return num * arguments.callee(num-1); }
De cette façon, quelle que soit la variable à laquelle la fonction est affectée, il n'y aura aucun problème lors des appels ultérieurs. Par conséquent, il est recommandé d’utiliser arguments.callee dans une fonction récursive au lieu de la fonction elle-même. Ou vous pouvez utiliser expression de fonction pour résoudre ce problème :
var factorial = (function f(num){ if(num<=1) return 1; return num*f(num-1); });
De cette façon, peu importe si la variable factorielle est affectée à une autre variable, il n'y aura aucun problème avec la appel récursif.
Résumé :
Grâce à l'introduction détaillée de cet article, je pense que les amis auront une nouvelle compréhension du problème des fonctions récursives dans JavaScript. J'espère que cela vous aidera dans votre travail !
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!