InternalError: too much recursion
Message
Error: Out of stack space (Edge) InternalError: too much recursion (Firefox) RangeError: Maximum call stack size exceeded (Chrome)
Type d'erreur
Quel est le problème ?
Une fonction qui s'appelle elle-même est une fonction recursive. Lorsqu'une certaine condition est respectée, la fonction arrête de s'appeler elle-même, c'est ce qu'on appelle le cas initial.
D'une certaine façon, une récursion est semblable à une boucle. Les deux exécutent le même code plusieurs fois, et les deux ont besoin d'une condition d'arrêt afin d'éviter une boucle infinie ou une récursion infinie. Lorsqu'il y a trop de niveaux de récursion ou une récursion infinie, JavaScript lèvera cette erreur.
Exemples
Cette fonction récursive est exécutée 10 fois comme l'indique la condition de sortie :
js
function loop(x) {
if (x >= 10) {
// "x >= 10" is the exit condition
return;
}
// do stuff
loop(x + 1); // the recursive call
}
loop(0);
Si la condition d'arrêt est beaucoup trop grande, cela ne fonctionnera pas :
js
function loop(x) {
if (x >= 1000000000000) {
return;
}
// do stuff
loop(x + 1);
}
loop(0);
// InternalError: too much recursion
Si la fonction récursive ne possède pas de cas initial, il n'y aura pas de condition de sortie et la fonction continuera de s'appeler indéfiniment.
js
function boucle(x) {
boucle(x + 1);
// il n'y a pas de cas initial
}
boucle(0);