Return VARIABLE desde otro archivo .JS

zoo

Moderador
Miembro del equipo
19 Jul 2004
5,821
Tengo 2 archivos .js:
main.js
functions.js

Estoy intentando pasar un valor de una variable (result) de una función con return del archivo functions.js (donde tengo todas mis funciones) al archivo main.js (donde quiere mostrar el resultado), el valor es correcto al calcularlo en la función, pero cuando intento retornar el valor para desplegarlo me sale result = undefine.
Debo decir que si escribo lo siguiente:
return sumar(a+b) funciona perfectamente, pero no es lo que quiero, quiero almacenar el valor de la suma en la variable "result"

Si coloco la función sumar() dentro del mismo archivo main.js, funciona perfectamente, pero desde el archivo functions.js el valor se pierde al ser exportado desde allá

Alguien me puede explicar qué estoy haciendo mal, por favor?

Este es el código de ej.

JavaScript:
/* EL ARCHIVO ESTA INCLUIDO antes del terminar el BOD en el index.html:

<script src="./js/functions.js" type="module">

*/

// IMPORTACIÓN DEL ARCHIVO
import {sumar} from ("./js/functions.js")

console.log(result);

// LA FUNCIÓN ESTA EN UN ARCHIVO APARTE functions.js
export function sumar(a,b {
  let result = a + b;
  return result;
}
 
JavaScript:
export function sumar(a,b {
  let result = a + b;
  return result;
}

Este es tu codigo, aclaro no soy experto programador y apenas estoy aprendiendo poco a poco pero si haces el codigo de esta manera seguro te funciona

JavaScript:
function sumar(a,b) {
    let resultado = a + b;
    return resultado
}
export { sumar };
}

y en este codigo que escribiste
JavaScript:
// IMPORTACIÓN DEL ARCHIVO
import {sumar} from ("./js/functions.js")

console.log(result);

Lo deberias escribir asi
JavaScript:
import { sumar } from "./functions.js";

var prueba = sumar(6,8);
console.log(prueba)
 
  • Me encanta
  • Me gusta
Reacciones: zoo y Toooooony
Aunque la respuesta de ssants puede funcionar. Creo que no es lo que quiere. porque de ser así pondría todo en un archivo.

Esa respuesta sin decirlo explicitamente le explica una cosa, Ud. está importando una función que puede usar en su otro archivo, no está importando el resultado.

Se me ocurre que la forma más sencilla sería con local storage. Guardar en el navegador el valor y cualquier otro script puede acceder a éste.



Tony.
 
  • Me gusta
Reacciones: JohnDM y zoo
Aunque la respuesta de ssants puede funcionar. Creo que no es lo que quiere. porque de ser así pondría todo en un archivo.

Esa respuesta sin decirlo explicitamente le explica una cosa, Ud. está importando una función que puede usar en su otro archivo, no está importando el resultado.

Se me ocurre que la forma más sencilla sería con local storage. Guardar en el navegador el valor y cualquier otro script puede acceder a éste.



Tony.
top! yo estoy aprendiendo entonces, ni idea de el local storage, respecto a meter todo en un archivo se puede pero por orden y entendimiento separar la logica de las funciones esta bien o ni idae como funcionara eso en el mundo laboral, solo me aventure a intentar dar una respuesta!
 
  • Me gusta
Reacciones: zoo
Sinceramente no entendí completamente su pregunta, pero creo que lo que quiere es poder acceder desde main.js al resultado de su función definida en functions.js, si ese es el caso es muy sencillo.

En el main.js usted importó la función "suma", eso quiere decir que usted puede ejecutar esa función donde quiera en el archivo que lo importó y además con los parámetros que quiera.

En su caso en el main.js en lugar de imprimir "result" lo que debe hacer es lo siguiente:


JavaScript:
import {sumar} from ("./js/functions.js")

console.log(result); // No hagas esto, ya te explico porqué es undefined

// En su lugar puedes hacer esto:
console.log( suma(1, 2) ) // Los parámetros "1" y "2", pueden ser los que quieras
/* En este caso estás importando la definición de la función, es decir es como si
   estuvieras escribiendo la función al inicio del archivo y así poder usarla dentro
   de este mismo.
*/

Ahora, por qué result = undefined en el archivo main.js?
Resulta que hay algo que se llama scope en javascript, esto es muy importante que lo sepas si piensas trabajar con js, a modo de resumen la variable "result" la definiste dentro del scope de la función "sumar" por lo tanto sólo dentro de esta funciíon podrás accederla (tampoco puedes accederla desde el mismo archivo functions.js), por eso cuando intentas acceder desde el archivo main.js el resultado es undefined, porque esa variable no se ha definido en ese scope.
 
  • Me gusta
Reacciones: ssantss y zoo
top! yo estoy aprendiendo entonces, ni idea de el local storage, respecto a meter todo en un archivo se puede pero por orden y entendimiento separar la logica de las funciones esta bien o ni idae como funcionara eso en el mundo laboral, solo me aventure a intentar dar una respuesta!

Si, la respuesta está bien. Pero supongo que si tiene dos archivos separados es por algún motivo donde el de la suma se encarga de obtener los valores de otra parte. (O hace parte de más funciones) etc. (sabrá él)

De poder tener acceso a las variables x,z y ejecutar suma(x,z) en el segundo archivo perdería el chiste. Podría hacerlo todo en un solo archivo sin problema.


Tony.
 
  • Me gusta
Reacciones: zoo y ssantss
Gracias a todos!!!

Con sus explicaciones y ejemplos pude solucionar el problema. Lo que sucede es que estoy pensando como en FoxPRO XDDD

Allí llamaba una función en otro archivo, previamente vinculado, y me retornaba el valor. Este valor estaba en la memoria con el nombre de la variable de retorno y así podía usarla donde sea sin problemas.

En JS, la forma de hacer eso es diferente o al menos es lo que entendí. En JS si queremos el resultado del return en una variable que estamos importando necesitamos desde el archivo donde se llama la función, declarar una variable y almacenar el llamado de la función con los parámetros, tal como dijo el amigo @ssantss

JavaScript:
var resultado = sumar(6,8);

Gracias gente, estoy desde ayer intentando hacer eso, hice de todo y no me daba resultados de nada.

He de decir que estoy comenzando a actualizarme con la tecnología actual de programación, yo aprendí a programar en MS Basic hace cualquier cantidad de años...

Saludos