7

Ejemplo de memory heap y call stack.

Las variables y funciones se guardan en el memory heap.

Problema: Dados los tres lados de un triángulo, calcular su área aplicando la siguiente fórmula:

tutorialecuacion.PNG

Como siempre lo primero que tenemos que hacer es entender el problema, después obtener los datos que requerimos para llegar al resultado. Tenemos como dato de salida(output) el área que será mostrado en pantalla, posteriormente tenemos los 3 lados de triangulo que nos servirán como datos de entrada: L1, L2, L3. Sabemos que es mala practica de programación llamar a las variables x1, x2, x3, ….,xn a pesar de que el significado de estas es intuitivo, así que mejor describiremos esas variables cómo: lado1, lado2, lado3.
Una vez que tengamos nuestros datos, es necesario proceder al proceso para obtener nuestro resultado. En este caso para mostrar nuestro ejemplo usaremos dos métodos: uno para resolver la ecuación del valor auxiliar y otro para calcular el área con ayuda del método auxiliar. Estos métodos nos servirán como ayuda para obtener el resultado. Aquí una propuesta a la solución usando dos arrow functions:

const auxiliar=(lado1,lado2,lado3)=>{
    return (lado1+lado2+lado3)/2;
}

const areaDelTriangulo=(lado1,lado2,lado3)=>{
    var _auxiliar=auxiliar(lado1,lado2,lado3);
    return Math.sqrt(_auxiliar*(_auxiliar-lado1)*(_auxiliar-lado2)*(_auxiliar-lado3));
}

console.log(`Area del triangulo: ${areaDelTriangulo(6.1,4.8,3.4)}`);

Empecemos por representar de forma gráfica el memory heap. En este caso nosotros no sabemos con exactitud cómo administra la memoria Javascript Engine administra la memoria, es decir no sabemos cómo se elije el acomodo de las variables y funciones y en base a qué se les asigna una dirección de memoria; para esto tendríamos que entrevistar a los creadores y a quienes dan soporte al lenguaje para que nos expliquen a detalle el proceso que usan para acomodar las variables y funciones, por lo que para fines representativos vamos a suponer que nuestras funciones y variables están acomodadas de esta forma:

memoryHeap.png

Nota: _Las direcciones de memoria(id) y los valores dentro de las mismas son solo suposiciones, no necesariamente tienen que ser representadas de esa forma para acomodar esta parte JavaScript Engine es quien se encarga de hacer estas representaciones. _

Veamos la parte del Call Stack, para ello volveremos a usar el mismo código pero ahora visualizaremos por medio de la keyword debugger:

const auxiliar=(lado1,lado2,lado3)=>{
    return (lado1+lado2+lado3)/2;
}

const areaDelTriangulo=(lado1,lado2,lado3)=>{
    var _auxiliar=auxiliar(lado1,lado2,lado3);
    return Math.sqrt(_auxiliar*(_auxiliar-lado1)*(_auxiliar-lado2)*(_auxiliar-lado3));
}

debugger;

console.log(`Area del triangulo: ${areaDelTriangulo(6.1,4.8,3.4)}`);
llenarStack.PNG

Recordemos que anonymous es this o window.

Aquí el proceso completo al llenar la pila:

debugger1.png
debugger2.png
debugger3.png

Podemos observar los resultados de la función auxiliar en su scope local:

![](debugger4.png

Una vez que se llena el Stack, al no tener funciones por llamar se finaliza la ejecución de cada una de estas:

vaciarStack.PNG

Entonces el proceso sería el siguiente una vez que se termina de ejecutar la función auxiliar:

![](debugger6.png

Notemos el resultado final del área cuando se manda a llamar la función “areaDelTriangulo” con los argumentos de: 6.1, 4.8 y 3.4:

debugger6.png

y finalmente nos quedamos con this, window o (anonymous):

debugger7.png

Si escribimos en la consola el código podemos confirmar nuestro valor:

console1.PNG

Entonces el área de este triangulo es aproximandamente 8.1338 cm^2

Escribe tu comentario
+ 2
1
7376Puntos

Gracias! otra forma diferente para entender el CallStack de javascript