Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

181
Vistas
variable nodejs indefinida al exportar

Hola, me preguntaba por qué lo siguiente devuelve indefinido:

 let variable; module.exports.initialize = () => { variable = "123"; }; module.exports.variable = variable;

Simplemente necesito el módulo en el archivo A y luego llamo a la función de inicialización. En el archivo BI lo requiere y console.log la variable pero devuelve indefinida. ¿Que me estoy perdiendo aqui?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

module.exports.variable es una propiedad en el objeto module.exports . Cuando inicializa su módulo, asigna el valor de variable a esa propiedad module.exports.variable y ese valor no está undefined en el momento en que lo asigna (porque aún no se ha llamado a la función initialize() ).

Entonces, cuando su módulo termine de inicializarse, module.exports.variable no está undefined .

Luego, algún tiempo después, alguien más llama a module.exports.initialize() y eso cambia la variable local dentro de su módulo a "123" . Eso no afecta en absoluto el valor de la propiedad module.exports.variable . Queda undefined .

En el futuro, no asigne a una propiedad ni a una variable el nombre de variable , ya que hace que sea muy difícil de documentar o discutir. Un nombre diferente que no entre en conflicto con la definición en inglés de la palabra variable simplificaría la discusión de este código.


Lo que puede hacer en su lugar es exportar un objeto en lugar de un valor simple.

 let myObj = { name: "John"}; module.exports.setName = (name) => { myObj.name = name; }; module.exports.sharedObj = myObj;

Entonces, ¿por qué lo importas a otro lugar?

 const aModule = require('./otherModule'); console.log(aModule.sharedObj); // {name: "John"} aModule.setName("Bob"); console.log(aModule.sharedObj); // {name: "Bob"}

Debido a que los objetos en Javascript se asignan por puntero, cuando hizo module.exports.sharedObj = myObj; en la inicialización del módulo, colocó un puntero a myObj en module.exports.sharedObj , de modo que cuando myObj cambie, cualquier persona que vea module.exports.sharedObj también verá ese cambio. Esto solo funciona de esta manera para objetos en Javascript, no para otros tipos de valores (cadenas, números, etc.).

about 4 years ago · Juan Pablo Isaza Denunciar

0

En JavaScript hay dos tipos de valores: 1) tipo primitivo y 2) tipo de referencia . los valores primitivos siempre se copian por su valor y los tipos de referencia siempre se copian por sus referencias (no por sus valores).

Ejemplos de valores primitivos: undefined, null, boolean, string, number . Ejemplos de tipos de referencia: todos los tipos que no sean tipos primitivos. por ejemplo, Object, array etc. Vea el fragmento a continuación.

Ejemplo de tipo primitivo

 let a = 10; let b = a; console.log(a); console.log(b); b = 20; console.log(a); console.log(b);

Ejemplo de tipo de referencia

 let obj_a = {value: 1} let obj_b = obj_a; console.log(obj_a); console.log(obj_b); obj_b.value = 20; console.log(obj_a); console.log(obj_b);

Entonces, cuando declara la variable como let variable su valor no está undefined y cuando asigna module.exports.variable = variable , simplemente está configurando su valor en undefined .

Vea el ejemplo a continuación.

 const myExports = {}; let variable; function initialize() { variable = 10; } myExports.variable = variable; console.log(variable); console.log(myExports.variable); initialize(); console.log(variable); console.log(myExports.variable);

Pero si tuviera que inicializar la variable con un tipo de referencia , por ejemplo, un objeto , entonces module.exports.variable reflejaría cualquier cambio en las propiedades de su variable variable.

Ejemplo:

 const myExports = {}; let object = {}; function initialize() { object.value = 10; } myExports.variable = object; console.log(object); console.log(myExports.variable); initialize(); console.log(object); console.log(myExports.variable);

Espero que tenga sentido.

about 4 years ago · Juan Pablo Isaza Denunciar

0

intente inicializar la variable en la función module.exports.initailize

 module.exports.initialize = () => { let variable; variable = "123"; }; module.exports.variable = variable;
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda