Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
8
respuestas

[Duda] ¡Ayuda! No me funciona como nos lo plantean

Buen día compañeros. Les explico:

Entiendo que la primera función retorna una variable llamada promedio, que usa la segunda función como parámetro para evaluar si aprueba o no.

El problema es que cuando la recibe la segunda función, me dice que no está declarada. Sólo funciona si la declaro antes, así:

let nota1 = 7;
let nota2 = 6;
let nota3 = 3;
let nota4 = 5;
let promedio = 0

function calcularPromedio(nota1, nota2, nota3, nota4){
    promedio = (nota1 +  nota2 +  nota3 +  nota4)/4
    return promedio;          
}

calcularPromedio(nota1, nota2, nota3, nota4);

function verificarAprobacion(promedio){
    return promedio >= 5 ? "aprobado" : "reprobado";
}
let aprobacion = verificarAprobacion(promedio)
console.log('Tu promedio es: ' + promedio + ', estás ' + aprobacion);

Si la declaro dentro de la función, como nos ponen en el ejemplo, me marca error en la línea donde llamo a la función "verificarAprobación" con "promedio" como parámetro, me dice que no está declarada:

let nota1 = 7;
let nota2 = 6;
let nota3 = 3;
let nota4 = 5;

function calcularPromedio(nota1, nota2, nota3, nota4){
    let promedio = (nota1 +  nota2 +  nota3 +  nota4)/4
    return promedio;          
}

calcularPromedio(nota1, nota2, nota3, nota4);

function verificarAprobacion(promedio){
    return promedio >= 5 ? "aprobado" : "reprobado";
}
let aprobacion = verificarAprobacion(promedio)
console.log('Tu promedio es: ' + promedio + ', estás ' + aprobacion);

Al probarla me manda éste error: app.js:18 Uncaught ReferenceError: promedio is not defined at app.js:18:19

Es decir, si modifico la función , sí funciona. Pero no la puedo hacer funcionar sin modificarla. Me pregunto si el ejemplo que nos dieron tiene un error o si hay forma de que funcione tal como está.

Agradezco su ayuda.

8 respuestas
function calcularPromedio(nota1, nota2, nota3, nota4) {
    let promedio = (nota1 + nota2 + nota3 + nota4) / 4;
    return promedio;
}

function verificarPromedio(promedio) {
    if (promedio >= 4) {
        asignarTextoElemento('p', 'Aprobado');
    } else {
        asignarTextoElemento('p', 'Reprobado');
    }
}

Gracias por responder Oscar. Exactamente, así es el ejemplo, pero no me funciona y no entiendo por qué, espero que me puedas ayudar. Ésto es lo que hice: declaré la función asignarTextoElemento, copié y pegué tu código y llamé a la función. Al llamar a la función, me marca éste error:

app.js:18 Uncaught ReferenceError: promedio is not defined at app.js:18:19

Éste es el código:

function asignarTextoElemento(elemento, texto) {
    let elementoHTML = document.querySelector(elemento);
    elementoHTML.innerHTML = texto;
}

function calcularPromedio(nota1, nota2, nota3, nota4) {
    let promedio = (nota1 + nota2 + nota3 + nota4) / 4;
    return promedio;
}

function verificarPromedio(promedio) {
    if (promedio >= 4) {
        asignarTextoElemento('p', 'Aprobado');
    } else {
        asignarTextoElemento('p', 'Reprobado');
    }
}
calcularPromedio(nota1, nota2, nota3, nota4);
verificarPromedio(promedio);

Hola ¿como estas? un honor poder ayudarte dentro de lo poco que he ido aprendiendo ahora te envio una version mas ordenada y completa pruebala y me comentas...saludos ozkar!

// Función para asignar texto a un elemento del DOM (interfaz de usuario)

function asignarTextoElemento(elemento, texto) {
    let elementoHTML = document.querySelector(elemento); // Seleccionamos el elemento con el selector dado
    elementoHTML.innerHTML = texto; // Cambiamos su contenido con el texto que se pasa como argumento
}

// Función para calcular el promedio de 4 notas

function calcularPromedio(nota1, nota2, nota3, nota4) {
    let promedio = (nota1 + nota2 + nota3 + nota4) / 4; // Calculamos el promedio de las notas
    return promedio; // Devolvemos el promedio
}

// Función para verificar si el promedio es aprobado o reprobado

function verificarPromedio(promedio) {
    if (promedio >= 4) { // Si el promedio es 4 o más, se aprueba
        asignarTextoElemento('p', 'Aprobado'); // Mostramos "Aprobado" en el HTML
    } else { // Si el promedio es menor que 4, se reprueba
        asignarTextoElemento('p', 'Reprobado'); // Mostramos "Reprobado" en el HTML
    }
}

// Ejemplo de uso: tenemos las notas del estudiante

let nota1 = 5; // Asignamos la primera nota
let nota2 = 4; // Asignamos la segunda nota
let nota3 = 3; // Asignamos la tercera nota
let nota4 = 6; // Asignamos la cuarta nota

// Calculamos el promedio de las 4 notas

let promedio = calcularPromedio(nota1, nota2, nota3, nota4);

// Llamamos a la función para verificar si el promedio es aprobado o reprobado

verificarPromedio(promedio);

Hola Oscar. Nuevamente gracias por tu ayuda. Muy clara tu explicación. Mi problema es que no entiendo por qué cuando declaro la variable "promedio" dentro de la función, así como el ejemplo que nos dieron y así como en el primer código que me mandaste, me marca error de que no está definida la variable.

Reformulé la pregunta al principio para tratar de explicarme mejor.

Básicamente es ¿Por que marca que no está definida la variable "promedio" cuando se declara dentro de la primera función, y por lo mismo no la puede utilizar la segunda función?

Gracias.

Hola, apelando a mi conocimiento en pañales recien naciendo en el mundo de la programacion..espero que esta respuesta salde tus dudas

El problema ocurre porque en JavaScript, las variables tienen ambito (scope), lo que significa que **una variable declarada dentro de una funcion solo existe dentro de esa funcion y no puede ser usada en otras funciones a menos que se pase como argumento o se defina en un ambito mas amplio.

Explicacion detallada Cuando declaras promedio dentro de calcularPromedio(), esa variable solo existe dentro de esa funcion. Otras funciones, como verificarPromedio(), no tienen acceso a ella porque esta definida en un ambito local.

Ejemplo del problema:

function calcularPromedio(nota1, nota2, nota3, nota4) {
    let promedio = (nota1 + nota2 + nota3 + nota4) / 4;
}

function verificarPromedio() {
    if (promedio >= 4) {
        console.log("Aprobado");
    } else {
        console.log("Reprobado");
    }
}

Observacion I: verificarPromedio() no sabe que es promedio, porque fue declarada dentro de otra funcion y no es accesible fuera de ella.

Solucion: Pasar "promedio" como parametro (Recomendada) En lugar de depender de una variable interna, pasamos el valor promedio como un argumento a la funcion verificarPromedio().

function calcularPromedio(nota1, nota2, nota3, nota4) {
    return (nota1 + nota2 + nota3 + nota4) / 4;
}

function verificarPromedio(promedio) {
    if (promedio >= 4) {
        console.log("Aprobado");
    } else {
        console.log("Reprobado");
    }
}

function calcularYVerificar() {
    let nota1 = parseInt(document.getElementById('nota1').value);
    let nota2 = parseInt(document.getElementById('nota2').value);
    let nota3 = parseInt(document.getElementById('nota3').value);
    let nota4 = parseInt(document.getElementById('nota4').value);

    let promedio = calcularPromedio(nota1, nota2, nota3, nota4);
    verificarPromedio(promedio);
}

observacion II Ahora funciona correctamente porque promedio se calcula en calcularPromedio() y luego se pasa a verificarPromedio().

Correcto. Ésa es una solución que funciona, pero ya modificaste la función que nos dieron como ejemplo. En el primer código que puse, también funciona, pero igual, ya no es la misma función. Y sí, lo del ámbito es lo que pensé. Pero entonces ¿por qué nos pusieron ésa función como ejemplo? ¿Será entonces que es un error o habrá forma de que funcione tal como está?

Gracias por seguir aquí ayudándome. Sigo aprendiendo con tus comentarios.

Hola Estudiante, tal vez el tema es que son ejemplos básicos y por eso los dieron separados, sólo para aplicar lógica básica.

Podría entender que al entregarlos separados, no había intención que el código funcionara así como estaba entregado.

Óscar Valenzuela, gracias por tu respuesta y aporte.

Hola Rita. Gracias por tu respuesta. Como dices, en general son ejemplos básicos los que nos ponen. Sin embargo, en este caso, todo el planteamiento que hacen, como declarar las variables de las notas y pedirnos una función que dependa de la otra, me confundió y me hizo pensar que debería funcionar, que algo no estaba haciendo bien. Pero si, tal vez sea como dices, ejemplos separados que no funcionan tal como están. Gracias por contestar.