Heim  >  Artikel  >  Web-Frontend  >  Analyse der maximalen Anzahl rekursiver Aufrufe, die von JavaScript_Javascript-Kenntnissen unterstützt werden

Analyse der maximalen Anzahl rekursiver Aufrufe, die von JavaScript_Javascript-Kenntnissen unterstützt werden

WBOY
WBOYOriginal
2016-05-16 16:43:111899Durchsuche

Sind Sie neugierig, wie viele rekursive Aufrufe die JavaScript-Engine durchführen kann?

Wie viele rekursive Aufrufe

Mit der folgenden Funktion können Sie die Antwort finden: (Inspiriert von Ben Almans Kerngedanken)

Code kopieren Der Code lautet wie folgt:

Funktion computeMaxCallStackSize() {
Versuchen Sie es mit {
            return 1 computeMaxCallStackSize();
} Catch (e) {
// Aufrufstapelüberlauf
         return 1;
}
}

Drei Ergebnisse:

Code kopieren Der Code lautet wie folgt:

Node.js: 11034
Firefox: 50994
Chrom: 10402

Was bedeuten diese Zahlen? Herr Aleph wies darauf hin, dass in V8 die Anzahl der rekursiven Aufrufe von zwei Größen abhängt: der Größe des Stapels und der Größe des Stapelrahmens (der lokalen Variablen, die die Parameter enthält). Sie können dies überprüfen, indem Sie in „computeMaxCallStackSize()“ eine lokale Variable hinzufügen – sie gibt den niedrigen Wert zurück.

Tail-Call-Optimierung in ECMAScript 6

ES6 verfügt über eine Tail-Call-Optimierung: Wenn der letzte Schritt in einer Funktion ebenfalls ein Funktionsaufruf ist, wird er „übersprungen“, anstatt über eine Unterfunktion aufgerufen zu werden. Das bedeutet, dass Sie unter ES6 (strenger Modus) die Funktion „computeMaxCallStackSize“ nur geringfügig ändern müssen und sie für immer ausgeführt werden kann.

Code kopieren Der Code lautet wie folgt:

Funktion computeMaxCallStackSize(size) {
Größe = Größe ||. 1;
Gibt „computeMaxCallStackSize(size 1);
“ zurück }

Stellungnahme:
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