global
브라우저의 window와 같은 같은 전역 객체입니다. 전역 객체이므로 모든 파일에 접근할 수 있습니다. 또한, window.open 메서드를 그냥 open으로 호출할 수 있는 것처럼 global도 생략할 수 있습니다. require 함수도 global.require에서 global이 생략된 것입니다. 노드 콘솔에 로그를 기록하는 console 객체도 원래는 global.console입니다.
global 객체 내부에는 매우 많은 속성이 들어 있습니다.
$ node
> 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: [Getter/Setter],
atob: [Getter/Setter],
btoa: [Getter/Setter],
performance: [Getter/Setter],
fetch: [Function: fetch],
navigator: [Getter],
crypto: [Getter]
}
> global.console
{
log: [Function: log],
warn: [Function: warn],
dir: [Function: dir],
time: [Function: time],
timeEnd: [Function: timeEnd],
timeLog: [Function: timeLog],
trace: [Function: trace],
assert: [Function: assert],
clear: [Function: clear],
count: [Function: count],
countReset: [Function: countReset],
group: [Function: group],
groupEnd: [Function: groupEnd],
table: [Function: table],
debug: [Function: debug],
info: [Function: info],
dirxml: [Function: dirxml],
error: [Function: error],
groupCollapsed: [Function: groupCollapsed],
Console: [Function: Console],
profile: [Function: profile],
profileEnd: [Function: profileEnd],
timeStamp: [Function: timeStamp],
context: [Function: context],
createTask: [Function: createTask]
}
노드 버전에 따라 콘솔 내용이 다를 수 있습니다. global 객체 안에는 수십 가지의 속성이 담겨 있습니다.
전역 객체라는 점을 이용하여 파일 간에 간단한 데이터를 공유할 때 사용하기도 합니다.
globalA.js와 globalB.js를 같은 폴더에 생성해봅니다.
globalA.js
module.exports = () => global.message;
globalB.js
const A = require("./globalA");
globalThis.message = "안녕하세요";
console.log(A());
globalA 모듈의 함수는 global.message 값을 반환합니다. globalB.js에서는 global 객체에 속성명이 message인 값을 대입하고 globalA 모듈의 함수를 호출합니다. 콘솔 결과는 globalB에서 넣은 global.message 값을 globalA에서도 접근할 수 있음을 보여줍니다.
$ node globalB
안녕하세요