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์ ๊ฐ์ด๊ธฐ๋ ํฉ๋๋ค.
์์
>ํ๊ฒฝ๋ณ ์ ์ญ ์ ๊ทผ
์ผ๋ฐ์ ์ผ๋ก ์ ์ญ ๊ฐ์ฒด๋ ๋ช ์์ ์ผ๋ก ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค. ํด๋น ์์ฑ์ ์๋์ผ๋ก ์ ์ญ ๋ณ์๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค.
console.log(window.Math === Math); // true
๊ทธ๋ฌ๋ ์ ์ญ ๊ฐ์ฒด์ ๋ช ์์ ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ ํ ๊ฐ์ง ๊ฒฝ์ฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํด๋ฆฌํ์ ์ํด ์ ์ญ ๊ฐ์ฒด์ ์์ฑ ํ ๋์ ๋๋ค.
globalThis ์ด์ ์๋ ํ๊ฒฝ์ ๋ํ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ ์ค ์ ์ผํ๊ฒ ๋ฏฟ์๋งํ ๊ต์ฐจ ํ๋ซํผ ๋ฐฉ๋ฒ์ Function('return this')() ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ก ์ธํด ์ผ๋ถ ์ค์ ์์ CSP ์๋ฐ์ด ๋ฐ์ํ๋ฏ๋ก ์์ฑ์๋ ์ด์ ๊ฐ์ ์กฐ๊ฐ๋ณ ์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค(์๋ core-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์ ๋ํ ๊ตฌํ์ ์ถ๊ฐํฉ๋๋ค.
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๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ํ๊ฒฝ ์ ์ฒด์ ๋ํ ์ถ๊ฐ ๊ฒ์์ด ๋ ์ด์ ํ์ํ์ง ์์ต๋๋ค.
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> |