Lección 03. Variables globales y cambios en Node.js.

A pesar de que Node.js es un entorno de interpretación para Javascript, tiene algunas reglas y características a aprender y saber.

Nota: Si haz programado desarrollo web con Javascript desde el navegador, entenderás un poco algunos cambios.

Variables globales._

Recordemos que Javascipt contiene algunas variables globales a utilizar, algunas como:

Estas son propiedades globales dentro de un objeto global de toda nuestra aplicación.

Nota: Esto es importante entender, para el siguiente punto.

Objeto window contra globalThis._

Si ya haz programado código javascript en desarrollo web habras utilizado algunas vez el objeto global window, del cual derivan algunas variables y funciones a utilizar.

En entorno Node.js NO EXISTE el objeto global WINDOW.

Si nosotros intentamos imprimir window:

Copiar código
console.log(window);

Obtendremos un error:

Copiar código
ReferenceError: window is not defined
  at Object.<anonymous> (C:UsersDZELDocumentsUniversidadCurso-NodeLeccion_01.js:1:13)
  at Module._compile (node:internal/modules/cjs/loader:1469:14)
  at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
  at Module.load (node:internal/modules/cjs/loader:1288:32)
  at Module._load (node:internal/modules/cjs/loader:1104:12)
  at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
  at node:internal/main/run_main_module:28:49
	
  Node.js v20.17.0

Nota: El cual significa que el objeto window no esta definido.

En su lugar, Node.js nos ofrece en sus lugar de window el objeto:

globalThis.

Donde esta es:

Una variable global en toda nuestra aplicación.

Donde:

global (en node.js) <-- globalThis --> window (en web)

Probemos el comando:

Copiar código
console.log(globalThis);

Que devuelve:

Copiar código
<ref *1> Object [global] {
  global: [Circular *1],
  clearImmediate: [Function: clearImmediate],       
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
queueMicrotask: [Function: queueMicrotask],
structuredClone: [Function: structuredClone],
queueMicrotask: [Function: queueMicrotask],
structuredClone: [Function: structuredClone],
atob: [Getter/Setter],
btoa: [Getter/Setter],
performance: [Getter/Setter],
fetch: [Function: fetch],
crypto: [Getter]
}

De tal modo que:

Copiar código
//Correcto
globalThis.console.log("Hola");

//Error
window.console.log("Hola");