[SOLUCIONADO] Ayuda: Node.js ambito de variables

Iniciado por patilanz, 24 Noviembre 2017, 02:21 AM

0 Miembros y 1 Visitante están viendo este tema.

patilanz

Si tengo un archivo a.js:

Código (javascript) [Seleccionar]
var variableImportante = {...};

var b = require('b.js');
b.funct(23);


y otro b.js
Código (javascript) [Seleccionar]
module.exports = {
   funct: (arg) => {//como acceder a variableImportante desde aqui sin pasarla como argumento a la funcion funct}
}



Un saludo

ivancea96

El modulo "b.js" no debería depender de una variable de otro archivo salvo que lo importe.

La mejor opción, es pasar el valor a mano. Puedes exportar en "b.js" una función "setVar()", y llamarla desde "a.js". Solo la llamarías una vez, es la ventaja, no tendrías que pasársela a cada función.

patilanz

#2
Cita de: ivancea96 en 24 Noviembre 2017, 17:05 PM
El modulo "b.js" no debería depender de una variable de otro archivo salvo que lo importe.

La mejor opción, es pasar el valor a mano. Puedes exportar en "b.js" una función "setVar()", y llamarla desde "a.js". Solo la llamarías una vez, es la ventaja, no tendrías que pasársela a cada función.

Esto podria ser una solucion pero si son varias variables no me gustaria pasar todos como argumentos. Tambien se pueden poner todos en un objeto y pasarlo pero no es lo que busco.

Y si en variableImportante tengo un objeto que contiene datos de un objeto binario muy grande que no es conveniente copiar, como puedo pasarlo como puntero?

ivancea96

En javascript las variables no se copian. Tampoco se pasan por referencia. Es como pasar una referencia al objeto que contiene. Con lo cual, los objetos grandes no tendrán problema.

Y bueno. Lo de que un módulo de Node tenga acceso a una variable de otro código que va a importar ese módulo... Es casi una referencia circular, que es mejor evitar.

patilanz

Cita de: ivancea96 en 25 Noviembre 2017, 21:10 PM
En javascript las variables no se copian. Tampoco se pasan por referencia. Es como pasar una referencia al objeto que contiene. Con lo cual, los objetos grandes no tendrán problema.

Y bueno. Lo de que un módulo de Node tenga acceso a una variable de otro código que va a importar ese módulo... Es casi una referencia circular, que es mejor evitar.

Lo haré con setVar gracias :D

Luis Leon B

Puedes importar la variable de a.js en b.js como una clase, si es algo de lo que buscas:

class VariableImp {
constructor() {
this.variableImportante  = { };
}
}

export default VariableImp;

y en b.js
a = require('./a.js');
variableImp = new a.VariableImp() // Si usas babel puedes hacer import a, {VariableImp} from './a.js';

module.exports = {
funct:(arg) => {variableImp.variableImportante /* is usas babel seria solo VariableImp */}
}