The JavaScript exception "too much recursion" or "Maximum call stack size exceeded" occurs when there are too many function calls, or a function is missing a base case.
Message
Error: Spazio nello stack esaurito (Edge) InternalError: Troppa ricorsione (Firefox) RangeError: Dimensioni massime dello stack superate (Chrome)
Error type
Cos'è andato storto?
Una funzione che si chiama da sola si chiama funzione ricorsiva. Una volta che la condizione è soddisfatta, la funzione smette di chiamarsi. Questo si chiama caso di base.
In certi versi, la ricorsione è analoga ai cicli. Entrambi eseguono lo stesso codice più volte, ed entrambi richiedono una condizione(per evitare cicli infiniti,o in questo caso, ricorsioni infinite). Quando ci sono troppe chiamate, o manca il caso di base , JavaScript lancerà questo errore.
Esempi
Questa funzione ricorsiva si chiama 10 volte, secondo le condizioni d'uscita
function ciclo(x) {
if (x >= 10) // "x >= 10" condizione d'uscita
return;
// do stuff
ciclo(x + 1); // chiamata ricorsiva
}
ciclo(0);
Impostare questa condizione a valori estremamente alti non funzionerà:
function ciclo(x) {
if (x >= 1000000000000)
return;
// fà cose
ciclo(x + 1);
}
ciclo(0);
// Errore Interno: troppa ricorsione
Alla funzione manca un caso base.Visto che non c'è condizione di uscita, la funzione chiama se stessa all'infinito.
function ciclo(x) {
// Manca caso base
ciclo(x + 1); // Chiamata ricorsiva
}
ciclo(0);
// Errore Interno: troppa ricorsione