Creé una función simple para calcular el promedio de 3 números:
let calcAverage = (v1,v2,v3) =>{ calcAverage = v1+v2+v3 / 3; return calcAverage } const d1 = calcAverage(44, 23,71) const k1 = calcAverage(44, 23,71) console.log(d1) si comenta: const k1 = calcAverage(44, 23,71) entonces notará que const d1 = calcAverage(44, 23,71) funciona, pero ¿por qué dice 'Error de tipo no detectado: calcAverage no es una función para esta línea de código: const k1 = calcAverage(44, 23,71) ? esto no tiene ningún sentido para mí. como hago para que funcionen los dos? y ¿por qué incluso dice que calcAverage no es una función en primer lugar?
Porque reasignó calcAverage en esta línea
calcAverage = v1+v2+v3 / 3; lo que hizo calcAverage un valor number en lugar de una función
¿Por qué no devuelves estos cálculos inmediatamente?
return v1+v2+v3 / 3;Al llamar a calcAverage por primera vez, de hecho es una función. Sin embargo, lo sobrescribe dentro de la función misma para que sea un number :
calcAverage = v1+v2+v3 / 3;Simplemente cambie el nombre de la variable dentro de la función para que funcione como espera:
const calcAverage = (v1,v2,v3) =>{ const result = v1+v2+v3 / 3; return result; } const d1 = calcAverage(44, 23,71); const k1 = calcAverage(44, 23,71); console.log(d1);Actualizar:
Para ver claramente el problema, puede cerrar sesión en el tipo de calcAverage para cada una de las llamadas a funciones:
let calcAverage = (v1,v2,v3) =>{ calcAverage = v1+v2+v3 / 3; return calcAverage; } console.log("Type before first call: ", typeof calcAverage); const d1 = calcAverage(44, 23,71); console.log("Type before second call: ", typeof calcAverage); const k1 = calcAverage(44, 23,71); Por cierto, esto muestra muy bien la ventaja de usar const sobre let para constantes reales. Si hubiera declarado calcAverage como const , no se habría encontrado con este problema.
Encontré una variable dentro de la función con el mismo nombre de función. entonces, cuando llama a calAverage por segunda vez, no es una función, sino el resultado de algún cálculo. también hice funcionar como una constante
const calcAverage = (v1, v2, v3) => { let calcAverageVal = v1 + v2 + v3 / 3 return calcAverageVal } const d1 = calcAverage(44, 23, 71) const k1 = calcAverage(44, 23, 71) console.log(d1)