¿En qué alcance se almacenan las variables del módulo en node.js?

Resuelto Jelle De Loecker asked hace 11 años • 4 respuestas

Cuando hago esto en mi módulo node.js:

var abc = '123';

¿A dónde va? Y con esto quiero decir: en el navegador entrawindow.abc (si no se ejecuta en una función o no)

Si ejecuto esto:

abc = '123';

Entonces puedo encontrarlo en global.abc, pero no es así como lo quiero.

Jelle De Loecker avatar Mar 14 '13 16:03 Jelle De Loecker
Aceptado

A diferencia del navegador, donde las variables se asignan de forma predeterminada al espacio global (es decir, la ventana), en Node las variables tienen como ámbito el módulo (el archivo) a menos que usted explícitamente a module.exports.

De hecho, cuando ejecuta node myfile.jso require('somefile.js')el código en su archivo se empaqueta de la siguiente manera:

(function (exports, require, module, __filename, __dirname) {
     // your code is here
});
Hector Correa avatar Mar 14 '2013 13:03 Hector Correa

Todas las demás respuestas son 100% correctas, pero pensé en agregar una lista ampliada/definitiva de los alcances dentro de una aplicación Node.js en caso de que alguien encuentre esto a través de Google mientras comienza a aprender Node.js o JavaScript:

Alcance global

Todo lo declarado sin la varpalabra clave en cualquier archivo será accesible desde cualquier lugar que se ejecute en la misma instancia del servidor Node:

// foo.js
bar = 'baz';


// qux.js
console.log(bar); // prints 'baz'

Tenga en cuenta que esto se considera una mala idea, porque hace que su aplicación esté fuertemente "acoplada", lo que significa que tendría que abrir foo.js para descubrir por qué bar = 'baz'en qux.js.

Alcance del módulo

Todo lo declarado con la varpalabra clave en el nivel superior (no dentro de una función u objeto, o cualquier otro bloque) de un archivo node.js está en el alcance del módulo y será accesible desde cualquier lugar dentro del mismo archivo, pero no existirá en ningún otro lugar. :

// foo.js
var bar = 'baz';
console.log(bar); // prints 'baz'


// qux.js
console.log(bar); // prints 'undefined'

Alcance de la función

Todo lo declarado usando la varpalabra clave dentro de una función solo será accesible desde esa función y no desde ningún otro lugar:

// foo.js
function myFunction() {
  var bar = 'baz';
  console.log(bar); // prints 'baz'
}

function myOtherFunction() {
  console.log(bar); // prints 'undefined'
}



// qux.js
console.log(bar); // prints 'undefined'

JavaScript tiene un alcance funcional . A diferencia de otros lenguajes ( con ámbito de bloque ), las variables declaradas en un bloque dentro de una función son accesibles desde cualquier otro lugar de esa función principal . Por ejemplo, esto significa que si declaras una nueva variable dentro de un bucle, también será accesible fuera de ese bucle, siempre y cuando todavía estés dentro de la función principal:

function myFunction() {
  while (thing === true) {
  var bar = 'baz';
  thing = false;
  }
  console.log(bar); // prints 'baz'
}

sombreado

Si "redeclara" una variable existente, por ejemplo, utiliza la varpalabra clave con un nombre de variable que ya se ha utilizado, entonces el valor asociado con ese nombre de variable se sobrescribe dentro del alcance de la nueva declaración :

var bar = 'foo';
console.log(bar) // prints 'foo'

function myFunction() {
  var bar = 'baz';
  console.log(bar);
}
myFunction(); // prints 'baz'
console.log(bar) // prints 'foo'
Toadfish avatar Feb 16 '2016 12:02 Toadfish