밝을희 클태

[JS / JavaScript] 전연 객체란 무엇일까? 본문

JavaScript

[JS / JavaScript] 전연 객체란 무엇일까?

huipark 2024. 3. 7. 20:18

전역 객체는 코드 실행이 되기전에 어떠한 객체보다 가장 먼저 생성이 되는 객체이다.

어떠 객체에도 속하지 않는 최상위 객체이다.

 

전역 객체의 이름은 브라우저, node.js 제각각이다. 브라우저 환경에서는 window, node.js 환경에서는 global이 전역 객체를 가르킨다. 하지만 ES11에서 도입된 globalThis를 사용하면 환경에 제약받지 않고 전역 객체를 가르킬 수 있다.

console.log(globalThis);

{/* 
  <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],
  atob: [Getter/Setter],
  btoa: [Getter/Setter],
  performance: [Getter/Setter],
  navigator: [Getter],
  fetch: [Function: fetch],
  crypto: [Getter]
}

전역 객체를 출력해보자 우리가 자주쓰는

  • fetch
  • navigator
  • setInterver
  • setTimeout

등 이 출력된다. 전역 객체의 프로퍼티를 참조할때는 window, global을 생략할 수 있다. 그래서 우리가 fetch를 사용할때 전역 객체의 프로퍼티인데 window.fetch() 가 아닌 fetch()로 사용을 할 수가 있었다.

 

그런데 모던 자바스크립트를 읽다가 문제가 생겼다

브라우저 환경에서는 아래의 코드를 실행시키면 var 키워드로 전역 변수를 선언하면 암묵적으로 전역 객체의 프로퍼티가 돼서 전역 객체 에서 해당 값을 가르킬 수 있는데 node.js 환경에서는 global 로 해도 undefined가 나온다

var x = 10;
console.log(window.x); //10

이거는 그냥 window 환경의 javascript 와 node.js 환경의 javascript가 작동하는 방식이 달라서 그렇다