Êtes-vous curieux de savoir combien d'appels récursifs peuvent être passés par le moteur JavaScript?
Combien d'appels récursifs
La fonction suivante vous permet de trouver la réponse: (inspirée par l'essentiel de Ben Alman)
La copie de code est la suivante:
Fonction ComposeMaxCallStackSize () {
essayer {
return 1 + composeMaxCallStackSize ();
} catch (e) {
// Call Stack Overflow
retour 1;
}
}
Trois résultats:
La copie de code est la suivante:
Node.js: 11034
Firefox: 50994
Chrome: 10402
Que représentent ces chiffres? M. Aleph a souligné que dans V8, le nombre d'appels récursifs dépend de deux quantités: la taille de la pile et la taille du cadre de pile (la variable locale qui contient les paramètres). Vous pouvez vérifier qu'en ajoutant des variables locales dans ComposeMaxCallStackSize () - il renvoie une valeur faible.
Optimisation des appels de queue dans Ecmascript 6
ES6 a une optimisation des appels de queue: si la dernière étape d'une fonction est également un appel de fonction, il sera "sauté" au lieu d'être appelé par une sous-fonction. Cela signifie que dans ES6 (mode strict), il vous suffit de modifier un peu la fonction ComposeMaxCallStackSize, et il peut être exécuté pour toujours.
La copie de code est la suivante:
Fonction ComposeMaxCallStackSize (Size) {
size = size || 1;
return ComposeMaxCallStackSize (taille + 1);
}