¿Tiene curiosidad sobre cuántas llamadas recursivas pueden hacer el motor JavaScript?
Cuántas llamadas recursivas
La siguiente función le permite encontrar la respuesta: (Inspirado en la esencia de Ben Alman)
La copia del código es la siguiente:
función CompuMaMaxCallStackSize () {
intentar {
return 1 + CompuMaMaxCallStackSize ();
} catch (e) {
// Llamar al desbordamiento de la pila
regresar 1;
}
}
Tres resultados:
La copia del código es la siguiente:
Node.js: 11034
Firefox: 50994
Chrome: 10402
¿Qué representan estos números? El Sr. Aleph señaló que en V8, el número de llamadas recursivas depende de dos cantidades: el tamaño de la pila y el tamaño del marco de la pila (la variable local que contiene los parámetros). Puede verificar eso agregando variables locales en CompuMaMaxCallStackSize (): devuelve un valor bajo.
Optimización de llamadas de cola en Ecmascript 6
ES6 tiene optimización de llamadas de cola: si el último paso en una función también es una llamada de función, se "saltará" en lugar de ser llamado por una subfunción. Esto significa que en ES6 (modo estricto), solo necesita cambiar un poco la función CompuMaxCallStackSize, y se puede ejecutar para siempre.
La copia del código es la siguiente:
función CompuMaMaxCallStackSize (size) {
tamaño = tamaño || 1;
return CompuMaMaxCallStackSize (tamaño + 1);
}