Cette fois je vous apporte quelles sont les précautionsVoici des cas pratiques.
Fonction récursive : Une fonction récursive est construite en s'appelant par son nom.
Implémenter récursivement la fonction factorielle :
Méthode 1 : Utiliser le nom de la fonction via
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(factorial(4));
Le résultat est : 24
Mais il y a un problème avec cette méthode d'implémentation de la récursivité. Observez le code suivant :
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; console.log(anthorFactorial(4));
. Le résultat est : 24
Mais :
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
Le résultat est : erreur
C'est parce que :
Le nom de la fonction que nous avons défini est en fait un pointeur vers la fonction, et le anotherFactorial que nous avons défini pointe également vers cette fonction, donc appeler anotherFactorial (4) peut générer avec succès 24
Lorsque factorial = null, l'exécution de pour définir la référence de la fonction quittera anotherFactorial, puis le message d'erreur ci-dessus sera affiché lors de l'appel de anotherFactorial(4).
À ce stade, arguments.callee peut être utilisé pour remplacer factoriel dans la définition de la fonction.
Méthode 2 : En utilisant arguments.callee
function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } } var anthorFactorial=factorial; factorial=null; console.log(anthorFactorial(4));
Le résultat est : 24
arguments.callee est un pointeur vers la fonction en cours d'exécution, donc arguments.callee peut être utilisé pour implémenter des appels récursifs à la fonction. En utilisant arguments.callee au lieu du nom de la fonction, vous pouvez vous assurer qu'il n'y aura aucun problème quoi qu'il arrive lors de l'appel de la fonction. Par conséquent, lors de l’écriture de fonctions récursives, il est toujours plus sûr d’utiliser arguments.callee que d’utiliser des noms de fonctions.
Cependant, en mode strict, arguments.callee n'est pas accessible via des scripts, et une erreur sera signalée lors de l'accès à cette propriété. Cependant, le même effet peut être obtenu en nommant l'expression de fonction .
Méthode 3 : Utilisation d'expressions de fonctions nommées
var factorial=function f(num){ if(num<=1){ return 1; }else{ return num*f(num-1); } }; f=null; console.log(factorial(4));
Cette approche fonctionne à la fois en mode strict et non strict.
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
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!