Heim > Web-Frontend > js-Tutorial > Hauptteil

Beispielanalyse der JS-Rekursion und des Timers

高洛峰
Freigeben: 2017-02-08 15:22:07
Original
1635 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die relevanten Kenntnisse über JS-Rekursion und Timer vorgestellt. Es hat einen sehr guten Referenzwert. Schauen wir es uns mit dem Editor unten an.

Rekursion: Es wird gebildet, wenn eine Funktion sich selbst aufruft all Ein Beispiel:

Function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
}
Nach dem Login kopieren
Dies ist eine klassische rekursive Fakultätsfunktion, beim Aufruf in js können jedoch einige Fehler auftreten: Zum Beispiel der folgende Code

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial)// 出错
Nach dem Login kopieren
Der obige Code speichert zunächst die Funktion „factorial()“ in der Variablen „otherFactory“ und setzt dann die Faktorvariable auf „Null“. der Bezug zur ursprünglichen Funktion bleibt bestehen. Wenn jedoch anotherFactioral() als nächstes aufgerufen wird, tritt ein Fehler auf, da die Fakultätsfunktion ausgeführt werden muss und es sich nicht mehr um eine Funktion handelt. In diesem Fall kann die Verwendung von arguments.callee dieses Problem lösen.

arguments.callee ist ein Zeiger auf die ausgeführte Funktion und kann daher zum Implementieren rekursiver Aufrufe der Funktion verwendet werden.

Zum Beispiel:

function factorial (num){
 if(num){
 return 1;
 }else{
 return num*arguments.callee;
 }
}
Nach dem Login kopieren

arguments.callee Vorteile:

1. Es kann sicherstellen, dass es keine Probleme gibt, egal wie Sie die Funktion aufrufen. Daher ist es beim Schreiben rekursiver Funktionen immer sicherer, arguments.callee zu verwenden als Funktionsnamen

Hinweis: Im strikten Modus ist dies ungültig und ein Fehler wird gemeldet

Schreiben im strengen Modus:

var factorial = (function f(){
 if(num<1){
 return 1;
 }else{
 return num*f(num-1);
 }
})
Nach dem Login kopieren

2. In Kombination mit verwenden Timer:

JS ist eine Single-Threaded-Sprache, ermöglicht jedoch die Planung der Codeausführung zu bestimmten Zeitpunkten durch Festlegen von Timeout-Aufrufen und -Intervallen. Ersteres führt den Code nach einer bestimmten Zeit aus, während letzteres den Code zu jeder angegebenen Zeit ausführt.

Parameter: auszuführender Code und Zeit in Millisekunden

//不建议传字符串,传递字符串可能导致性能损失 
setTimeout("alter(&#39;hello word&#39;)", 1000);
//推荐方式
setTimeout(function(){
 alter("Hello world");
},1000)
setInterval(function(){
 alter("Hello world");
},1000)
Nach dem Login kopieren
Hinweis: Ende

Der mit Timeout aufgerufene Code wird im globalen Bereich ausgeführt, daher zeigt der Wert davon in der Funktion im nicht-strikten Modus auf das Fensterobjekt und ist im strikten Modus undefiniert

<; 🎜 >In praktischen Anwendungen:

Die Verwendung von Timeout-Anrufen zur Simulation intermittierender Anrufe ist der beste Modus. In einer Entwicklungsumgebung werden echte intermittierende Anrufe selten verwendet, da letztere intermittierende Anrufe gestartet werden können zwischen vorherigen intermittierenden Anrufen.

Sie können dies vermeiden, wenn Sie einen Timeout-Aufruf wie oben verwenden. Verwenden Sie also keine intermittierenden Aufrufe.
var num = 0, max = 0;
function incrrmentNumber{
 num++;
 if(num < max){
 setTimeout(incrrmentNumber,500);
 }else{
 alert("Done");
 }
}
setTimeout(incrrmentNumber,500);
Nach dem Login kopieren

Weitere Artikel zu JS-Rekursion und Timer-Instanzanalyse finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage