3
respuestas

DUDA SOBRE UNA FUNCIÓN DENTRO DE OTRA FUNCIÓN

DUDA SOBRE UNA FUNCIÓN DENTRO DE OTRA FUNCIÓN

Intenté optimizar la function calcularIMC insertando dentro la function imprimir, pero no se ejecuta.

¿Por qué no funciona la "función imprimir" dentro de la "función calcularIMC" Si se puede utilizar una función dentro de otra?

Este es el código:

<meta charset="utf-8">

<h1>CALCULANDO EL IMC</h1>

<script>
    function saltarlinea() {
        document.write("<br>");
        document.write("<br>");
    }

    function imprimir(frase) {
        document.write(frase);
        saltarlinea();
    }

    function calcularIMC(peso,altura) {
        return (peso / (altura * altura));    
        imprimir("El promedio de IMC de Andrés y Rafa es: " + (calcularIMC(71,1.69) + calcularIMC(75,1.72))/2);
        imprimir("El promedio de IMC de Milagros y Laura es: " + (calcularIMC(80,1.45) + calcularIMC(65,1.60))/2);

    }

</script>

Esto me aparece cuando lo veo en el browser. Además cuando deseo buscar la línea de código errado, me aparece sin ningún error.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadQuedo atento a sus respuestas ante esta duda. Y gracias de antemano.

3 respuestas

hola, cuando colocas return despues de este la funcion no ejecuta nada mas, proba ponerlo abajo de los dos imprimir

Hola, Gianni.

Intenté lo que me indicaste colocar return despues de imprimir y aún así el error persiste.

José la función se esta auto llamando, eso se llama recursividad, pero la recursividad debe ser condicionada a un criterio de parada o finalización del llamado.

Ejemplo la función factorial: 4! = 1 x 2 x 3 x 4 = 3! x 4 y 0!=1 por lo que:

function factorial(n) {
    if (n > 1) { return n * factorial(n - 1) } else { return 1 };
  }
  imprimir(factorial(4)) // salida 24

Como se ejecuta:

  1. n=4, queda 4 x factorial(4 - 1) = 4 x factorial(3)
  2. factorial(3) = 3 x factorial(2)
  3. factorial(2) = 2 x factorial(1)
  4. factorial(1) = 1
  5. Quedando finalmente 4 x 3 x 2 x 1

La anterior función deja de auto invocarse cuando se alcanza el 1.

En tu caso debes dejarla así.

 function calcularIMC(peso, altura) {
    return (peso / (altura * altura));
  }
  imprimir("El promedio de IMC de Andrés y Rafa es: " + (calcularIMC(71, 1.69) + calcularIMC(75, 1.72)) / 2);
  imprimir("El promedio de IMC de Milagros y Laura es: " + (calcularIMC(80, 1.45) + calcularIMC(65, 1.60)) / 2);

Si esto aclara tu duda dale Solución