InternalError: too much recursion

Questa traduzione è incompleta. Aiutaci a tradurre questo articolo dall’inglese

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

InternalError.

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

Vedi anche