This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

globalThis

Baseline Widely available

This feature is well established and works across many devices and browser versions. Itโ€™s been available across browsers since โจ2020๋…„ 1์›”โฉ.

์ „์—ญ globalThis ์†์„ฑ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์—ญ ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•œ ์ „์—ญ this ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์‹œ๋„ํ•ด ๋ณด๊ธฐ

function canMakeHTTPRequest() {
  return typeof globalThis.XMLHttpRequest === "function";
}

console.log(canMakeHTTPRequest());
// Expected output (in a browser): true

๊ฐ’

์ „์—ญ this ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

Property attributes of globalThis
์“ฐ๊ธฐ ๊ฐ€๋Šฅ๊ฐ€๋Šฅ
์—ด๊ฑฐ ๊ฐ€๋Šฅ๋ถˆ๊ฐ€๋Šฅ
์„ค์ • ๊ฐ€๋Šฅ๊ฐ€๋Šฅ

์ฐธ๊ณ  : globalThis ์†์„ฑ์€ ๊ตฌ์„ฑ ๋ฐ ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ์ž‘์„ฑ์ž๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๊ณ  ์ „์—ญ ๊ฐ์ฒด ๋…ธ์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค๋ช…

์—ญ์‚ฌ์ ์œผ๋กœ ์ „์—ญ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ JavaScript ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น์—์„œ๋Š” window, self, frames๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Web Workers์—์„œ๋Š” self๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ๋Š” ์ด ์ค‘ ์–ด๋А ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋Œ€์‹  global์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. this ํ‚ค์›Œ๋“œ๋Š” ๋น„์—„๊ฒฉ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, this๋Š” ์—„๊ฒฉ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“ˆ ๋ฐ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ undefined๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. Function('return this')()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €์˜ CSP์™€ ๊ฐ™์ด eval()์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Function์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

globalThis ์†์„ฑ์€ ํ™˜๊ฒฝ์— ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „์—ญ this ๊ฐ’, ์ฆ‰ ์ „์—ญ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. window, self ๋“ฑ ์œ ์‚ฌํ•œ ์†์„ฑ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ window์™€ non-window ์ปจํ…์ŠคํŠธ ๋ชจ๋‘์—์„œ์˜ ๋™์ž‘์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋ชจ๋ฅด๋”๋ผ๋„ ์ „์—ญ ๊ฐ์ฒด์— ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์ „์—ญ ๋ฒ”์œ„์—์„œ this ๊ฐ’์€ globalThis๋ผ๋Š” ์ ๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”.

์ฐธ๊ณ  : ๋ธŒ๋ผ์šฐ์ €์™€ Node์˜ ๊ฒฝ์šฐ์—์„œ globalThis๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์—ญ ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค(์ฆ‰, globalThis์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋จ). ๊ทธ๋Ÿฌ๋‚˜ ํ˜ธ์ŠคํŠธ๋Š” ์ „์—ญ ๊ฐ์ฒด์™€ ๊ด€๋ จ์ด ์—†๋Š” globalThis์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTML๊ณผ WindowProxy

๋งŽ์€ ์—”์ง„์—์„œ globalThis๋Š” ์‹ค์ œ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๋Œ€ํ•œ ์ฐธ์กฐ์ด์ง€๋งŒ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” <iframe>๊ณผ ๊ต์ฐจ ์ฐฝ ๋ณด์•ˆ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ผ Proxy๋ฅผ ๋Œ€์‹  ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค(์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Œ). ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์—๋Š” ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜์ง€๋งŒ, ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ ์ง€์ •

self ๋ฐ global๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ๋ช…ํ•œ ์ด๋ฆ„ ์ œ์•ˆ๋“ค์€ ๊ธฐ์กด ์ฝ”๋“œ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์šฐ๋ คํ•ด ๊ณ ๋ ค ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์–ธ์–ด ์ œ์•ˆ์„œ์˜ "NAMING" ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

globalThis๋Š” ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์ „์—ญ this ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์—†์ด ํ˜ธ์ถœ๋˜๋Š” ๋น„์—„๊ฒฉ ํ•จ์ˆ˜์˜ this ๊ฐ’๊ณผ ๊ฐ™์€ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์˜ ์ „์—ญ ๋ฒ”์œ„์—์„œ this์˜ ๊ฐ’์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

ํ™˜๊ฒฝ๋ณ„ ์ „์—ญ ์ ‘๊ทผ

์ผ๋ฐ˜์ ์œผ๋กœ ์ „์—ญ ๊ฐ์ฒด๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์†์„ฑ์€ ์ž๋™์œผ๋กœ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
console.log(window.Math === Math); // true

๊ทธ๋Ÿฌ๋‚˜ ์ „์—ญ ๊ฐ์ฒด์— ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ฆฌํ•„์„ ์œ„ํ•ด ์ „์—ญ ๊ฐœ์ฒด์— ์ž‘์„ฑ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

globalThis ์ด์ „์—๋Š” ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ• ์ค‘ ์œ ์ผํ•˜๊ฒŒ ๋ฏฟ์„๋งŒํ•œ ๊ต์ฐจ ํ”Œ๋žซํผ ๋ฐฉ๋ฒ•์€ Function('return this')() ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ์„ค์ •์—์„œ CSP ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ž‘์„ฑ์ž๋Š” ์ด์™€ ๊ฐ™์€ ์กฐ๊ฐ๋ณ„ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์›๋ž˜ core-js ์†Œ์Šค).

js
function check(it) {
  // Math๋Š” ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์ „์—ญ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  return it && it.Math === Math && it;
}

const globalObject =
  check(typeof window === "object" && window) ||
  check(typeof self === "object" && self) ||
  check(typeof global === "object" && global) ||
  // ์—„๊ฒฉ ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•  ๋•Œ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  (function () {
    return this;
  })() ||
  Function("return this")();

์ „์—ญ ๊ฐ์ฒด๋ฅผ ์–ป์€ ํ›„ ์ƒˆ๋กœ์šด ์ „์—ญ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Intl์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

js
if (typeof globalObject.Intl === "undefined") {
  // No Intl in this environment; define our own on the global scope
  Object.defineProperty(globalObject, "Intl", {
    value: {
      // Our Intl implementation
    },
    enumerable: false,
    configurable: true,
    writable: true,
  });
}

globalThis๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ™˜๊ฒฝ ์ „์ฒด์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ฒ€์ƒ‰์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

js
if (typeof globalThis.Intl === "undefined") {
  Object.defineProperty(globalThis, "Intl", {
    value: {
      // Our Intl implementation
    },
    enumerable: false,
    configurable: true,
    writable: true,
  });
}

๋ช…์„ธ์„œ

Specification
ECMAScriptยฎ 2026 Languageย Specification
# sec-globalthis

๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ

๊ฐ™์ด ๋ณด๊ธฐ