Error de tamaño máximo de pila de llamadas excedido en JavaScript

Tahseen Tauseef 15 febrero 2024
  1. Se excedió el tamaño máximo de la pila de llamadas Error en JavaScript
  2. Función recursiva en JavaScript
  3. Arreglar una función recursiva en JavaScript
  4. Encuentra el error en JavaScript
Error de tamaño máximo de pila de llamadas excedido en JavaScript

El error Se excedió el tamaño máximo de la pila de llamadas de JavaScript se produce cuando se llama a una función tantas veces que las invocaciones superan el límite máximo de la pila de llamadas.

Si se produce el error Se excedió el tamaño máximo de la pila de llamadas de JavaScript, el problema radica en la función recursiva dentro de su código JavaScript. Más concretamente, el problema está en la función, que sigue llamándose a sí misma repetidamente.

Se excedió el tamaño máximo de la pila de llamadas Error en JavaScript

Cuando ocurre este error, hay varios pasos que puede seguir para corregir el fragmento de código que está consumiendo todas las pilas de llamadas disponibles dentro de un navegador.

Con la ayuda de este artículo de JavaScript, analizará con gran detalle por qué aparece el error Se excedió el tamaño máximo de la pila de llamadas y qué puede hacer para solucionarlo.

Todos los objetos de error de JavaScript descienden o se heredan del objeto Error. Esto se conoce como un RangeError.

Un RangeError a menudo indica un error fuera del valor del argumento del parámetro de un código.

Ahora que sabe un poco dónde se encuentra este error dentro del alcance de los errores de JavaScript, continuemos con la causa del error Se excedió el tamaño máximo de la pila de llamadas.

Aún así, debe comprender la recursividad antes de comprender el error Se excedió el tamaño máximo de la pila de llamadas.

Función recursiva en JavaScript

La recursividad es un patrón en el que una función definida se llama a sí misma, con cada iteración moviendo las condiciones más cerca de un caso base que permite escapar de las llamadas de función. Sin embargo, si no tiene cuidado, una función puede llamarse a sí misma continuamente hasta que se agote la pila del navegador.

La causa más común del error Se excedió el tamaño máximo de la pila de llamadas de una función recursiva es un problema con el caso base o la falta del mismo. Cuando el código recursivo no tiene su código base o lo supera, seguirá llamándose a sí mismo hasta que se alcance la Pila máxima de llamadas del navegador.

Arreglar una función recursiva en JavaScript

El problema con una función recursiva que continúa llamándose a sí misma es que es imposible pasar a la siguiente función dentro de una cadena y consumirá la totalidad de su pila.

Verificar dos veces sus funciones recursivas es el mejor enfoque para evitar este problema. Luego, para resolver el problema, especifique un caso base que debe cumplirse para salir de la recursividad.

La siguiente captura de pantalla muestra cómo se ve el código recursivo cuando se llama a sí mismo indefinidamente.

error de pila de llamadas

function example() {
  // RangeError: Maximum call stack size exceeded
  example();
}
example();

Puede llamar a la función, que se llama a sí misma hasta que se supera el límite de la pila de llamadas. Después de eso, debe especificar una condición en la que la función deje de llamarse a sí misma para resolver el error.

let counter = 0;

function example(num) {
  if (num < 0) {
    return;
  }

  counter += 1;
  example(num - 1);
}

example(4);

console.log(counter);

Esta vez comprobará si la función se invocó con un número menor que 0 en cada invocación. Si el número es menor que 0, regresará de la función, por lo que no excederá el límite de la pila de llamadas.

Si el valor pasado no es menor que cero, llamará a la función con el valor pasado, que es 1. Esto lo mantendrá avanzando hacia el caso en el que se cumple la verificación if.

Una función recursiva sigue llamándose a sí misma hasta que se cumple una condición. Por ejemplo, si no hay ninguna condición para completar su función, se llamará a sí misma hasta que se exceda el tamaño máximo de la pila de llamadas.

Recibirá este error si tiene un bucle infinito que llama a una función.

function sum(x, y) {
  return x + y;
}

while (true) {
  sum(10, 10);
}

El bucle while seguirá llamando a la función, y dado que no tiene una condición que pueda salir del bucle, eventualmente excederá el tamaño de la pila de llamadas.

Esto se comporta de manera similar a una función que se llama a sí misma sin una condición base. Por ejemplo, lo mismo sería el caso si usara un bucle for.

A continuación se muestra un ejemplo de cómo puede especificar una condición que debe cumplirse para salir del ciclo.

function sum(x, y) {
  return x + y;
}

let total = 0;

for (let i = 10; i > 0; i--) {
  total += sum(5, 5);
}

console.log(total);

La condición en el bucle for no se cumplirá si la variable i es igual o menor que 0; por lo tanto, dejará el bucle.

Encuentra el error en JavaScript

Revisar sus registros es el primer paso para encontrar un error, pero encontrar una línea de código roto puede ser difícil cuando se trabaja con miles de líneas de código.

El error también puede ocurrir si importa el mismo archivo muchas veces en la misma página, como cuando carga el script jQuery varias veces en la misma página. Abra la pestaña Red en las herramientas de desarrollo de su navegador y actualice la página para ver qué scripts están cargados en su sitio web.

Artículo relacionado - JavaScript Error