Maison > interface Web > js tutoriel > le corps du texte

Exemple d'analyse de la récursivité et du minuteur js

高洛峰
Libérer: 2017-02-08 15:22:07
original
1635 Les gens l'ont consulté

Cet article présente principalement les connaissances pertinentes sur la récursivité js et les minuteries. Il a une très bonne valeur de référence. Regardons-le avec l'éditeur ci-dessous

Récursion : elle est formée lorsqu'une fonction s'appelle

Premier de. all Un exemple :

Function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
}
Copier après la connexion

Il s'agit d'une fonction factorielle récursive classique, mais certaines erreurs peuvent survenir lors de son appel en js : Par exemple, le code suivant

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial)// 出错
Copier après la connexion

Le code ci-dessus enregistre d'abord la fonction factorial() dans la variable anotherFactory, puis définit la variable factorielle sur null. la référence à la fonction originale reste une. Mais lorsque anotherFactioral() est appelé ensuite, parce que la fonction factorielle doit être exécutée et que factoial n'est plus une fonction, une erreur se produira. Dans ce cas, l'utilisation d'arguments.callee peut résoudre ce problème.

arguments.callee est un pointeur vers la fonction en cours d'exécution, il peut donc être utilisé pour implémenter des appels récursifs à la fonction.

Par exemple :

function factorial (num){
 if(num){
 return 1;
 }else{
 return num*arguments.callee;
 }
}
Copier après la connexion

arguments.callee Avantages :

1. Cela peut garantir qu'aucun problème ne se produira, quelle que soit la manière dont vous appelez la fonction. Par conséquent, lors de l'écriture d'une fonction récursive, il est toujours plus sûr d'utiliser arguments.callee que d'utiliser le nom de la fonction

Remarque : il n'est pas valide en mode strict et ; une erreur sera signalée

Ecriture en mode strict :

var factorial = (function f(){
 if(num<1){
 return 1;
 }else{
 return num*f(num-1);
 }
})
Copier après la connexion

2. Utiliser dans combinaison avec timer :

JS est un langage à thread unique, mais il permet de planifier l'exécution du code à des moments spécifiques en définissant des appels et des intervalles de délai d'attente. Le premier exécute le code après une heure spécifiée, tandis que le second exécute le code à chaque heure spécifiée.

Paramètres : code à exécuter et temps en millisecondes

//不建议传字符串,传递字符串可能导致性能损失 
setTimeout("alter(&#39;hello word&#39;)", 1000);
//推荐方式
setTimeout(function(){
 alter("Hello world");
},1000)
setInterval(function(){
 alter("Hello world");
},1000)
Copier après la connexion

Remarque : Fin

Le code appelé avec timeout est exécuté dans la portée globale, donc la valeur de this dans la fonction pointe vers l'objet window en mode non strict, et n'est pas définie en mode strict

< ; 🎜 >Dans les applications pratiques :

L'utilisation d'appels de délai d'attente pour simuler des appels intermittents est le meilleur mode. Dans un environnement de développement, les appels intermittents réels sont rarement utilisés car ces derniers appels intermittents peuvent être démarrés. entre les appels intermittents précédents.

var num = 0, max = 0;
function incrrmentNumber{
 num++;
 if(num < max){
 setTimeout(incrrmentNumber,500);
 }else{
 alert("Done");
 }
}
setTimeout(incrrmentNumber,500);
Copier après la connexion

Vous pouvez éviter cela si vous utilisez un appel de délai d'attente comme ci-dessus. N'utilisez donc pas d'appels intermittents ;

Pour plus d'articles sur la récursivité js et l'analyse des instances de minuterie, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal