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); } }
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)// 出错
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; } }
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); } })
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('hello word')", 1000); //推荐方式 setTimeout(function(){ alter("Hello world"); },1000) setInterval(function(){ alter("Hello world"); },1000)
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);