Maison  >  Article  >  interface Web  >  Analyse du nombre maximum d'appels récursifs supportés par les compétences JavaScript_javascript

Analyse du nombre maximum d'appels récursifs supportés par les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:43:111899parcourir

Êtes-vous curieux de savoir combien d'appels récursifs le moteur JavaScript peut effectuer ?

Combien d'appels récursifs

La fonction suivante vous permettra de trouver la réponse : (Inspiré de l'essentiel de Ben Alman)

Copier le code Le code est le suivant :

fonction calculateMaxCallStackSize() {
Essayez {
            renvoie 1 calculateMaxCallStackSize();
} attraper(e) {
// Débordement de pile d'appels
         renvoie 1 ;
>
>

Trois résultats :

Copier le code Le code est le suivant :

Noeud.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 frame de pile (la variable locale qui contient les paramètres). Vous pouvez le vérifier en ajoutant une variable locale dans calculateMaxCallStackSize() - elle renverra la 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, elle sera "ignorée" au lieu d'être appelée via une sous-fonction. Cela signifie que sous ES6 (mode strict), il vous suffit de modifier légèrement la fonction calculateMaxCallStackSize et elle peut s'exécuter pour toujours.

Copier le code Le code est le suivant :

fonction calculateMaxCallStackSize(taille) {
taille = taille || 1;
Renvoie calculateMaxCallStackSize(size 1);
>

Déclaration:
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