globalThis
μ μλ¦λΌμΉλ ν΄λ¦¬νglobalThis
μ μμ λͺ¨λ μλ°μ€ν¬λ¦½νΈ νκ²½μμ μ μ this
μ μ κ·Όν μ μλ λ©μ»€λμ¦μ λμ
νλ€. globalThis
μ ν΄λ¦¬νμ λ§€μ° κ°λ¨ν κ² κ°μ§λ§, μ ννκ² λ§λ€κΈ°λ λ§€μ° μ΄λ ΅λ€. Toonμ΄ μ°½μ‘°μ μΈ ν΄κ²°μ±
μΌλ‘ λλ₯Ό κΉμ§λλν€κΈ° μ κΉμ§ λλ κ·Έκ²μ΄ κ°λ₯νλ€κ³ μκ°μ‘°μ°¨ λͺ»νλ€.
μ΄ κΈμ globalThis
μ μ μ ν ν΄λ¦¬ν μμ±μ΄ μ΄λ ΅λ€λ κ²μ μ€λͺ
νλ€. ν΄λ¦¬νμ μλμ μꡬμ¬νμ λ°λΌμΌνλ€.
λ¨Όμ μ©μ΄μ λν΄μ μ 리νκ² λ€. globalThis
λ μ μ μ€μ½νμ this
κ°μ μ 곡νλ€. μ΄κ²μ 볡μ‘ν μ΄μ λ‘ λΈλΌμ°μ μ μ μ κ°μ²΄μλ λ€λ₯΄λ€.
μλ°μ€ν¬λ¦½νΈ λͺ¨λμμ λͺ¨λ μ€μ½νλ μ μ μ€μ½νμ λΉμ μ μ½λ μ¬μ΄μ κ°μ
λμ΄ μλ€λ μ μ μ μν΄μΌ νλ€. λͺ¨λ μ€μ½νλ κΈλ‘λ² μ€μ½νμ this
λ₯Ό μ¨κΈ°κΈ° λλ¬Έμ λͺ¨λ μ€μ½νμ μ΅μλ¨μμ this
λ undefined
μ΄λ€.
μ¦, globalThis
λ "μ μ κ°μ²΄"κ° μλλ©°, λ¨μ§ μ μ μ€μ½νμ this
λ₯Ό μλ―Ένλ€. μ΄ μ€μν λμμ€λ₯Ό μ΄ν΄μμΌμ€ Domenicμκ² κ°μ¬νλ€.
globalThis
μ λμλΈλΌμ°μ μμ globalThis
μ λμΌν κ²μ window
μ΄λ€.
globalThis === window;
// β true
frames
λ λμΌνκ² λμνλ€.
globalThis === frames;
// β true
νμ§λ§, window
μ frames
λ (μΉ μ컀μ μλΉμ€ μ컀μ κ°μ) μ컀 컨ν
μ€νΈ μμμ undefined
μ΄λ€. μ΄ μ’κ²λ self
λ λͺ¨λ λΈλΌμ°μ 컨ν
μ€νΈμμ λμνλ―λ‘ λ κ°λ ₯ν λμμ΄λ€.
globalThis === self;
// β true
Node.jsμμλ window
, frames
, self
μ μ¬μ©ν μ μμ§λ§, global
μ μ¬μ©ν μ μλ€.
globalThis === global;
// β true
jsvu
μΌλ‘ μ€μΉνλ κ²κ³Ό κ°μ λ
립ν μλ°μ€ν¬λ¦½νΈ μμ§ μμμλ μμμ μ€λͺ
ν λͺ¨λ κ²(window
, frames
, self
, global
)μ μ¬μ©ν μ μλ€. μ¬κΈ°μλ μ μ this
μ μ κ·Όν μ μλ€.
globalThis === this;
// β true
κ²λ€κ° λμ¨ν λͺ¨λ ν¨μλ κ·Έλ€μ this
λ₯Ό μ μ this
λ‘ μ€μ ν μ μκΈ° λλ¬Έμ, μ½λλ₯Ό μ μ μ€μ½νμμ μ€νν μ μλλΌλ μ μ this
μ μ κ·Όν μ μλ€.
globalThis === (function() {
return this;
})();
// β true
νμ§λ§, μλ°μ€ν¬λ¦½νΈ λͺ¨λμμ μ΅μλ¨μ this
λ undefined
μ΄κ³ , μ격ν λͺ¨λμ ν¨μμμμ this
λ undefined
μ΄λ€. κ·Έλμ μ΄ μ κ·Όλ°©λ²μ μ¬κΈ°μ λμνμ§ μλλ€.
μΌλ¨ μ격ν λͺ¨λμ 컨ν
μ€νΈ μμμ μμλ‘ μ격ν λͺ¨λλ₯Ό κΉ¨κ³ λμ¬ μ μλ λ°©λ²μ μ€μ§ νλλ€. Function
μμ±μλ λμ¨ν ν¨μλ₯Ό μμ±νλ€.
globalThis === Function('return this')();
// β true
μ, eval
λ κ°μ ν¨κ³Όλ₯Ό λ΄κΈ° λλ¬Έμ λ κ°μ§ λ°©λ²μ΄ μλ€.
globalThis === (0, eval)('this');
// β true
λΈλΌμ°μ μμ Function
μμ±μμ eval
μ μ¬μ©νλ κ²μ 컨ν
μΈ λ³΄μ μ μ±
(Content Security Policy (CSP))λλ¬Έμ μ’
μ’
νλ½λμ§ μλλ€. μΉμ¬μ΄νΈλ μ’
μ’
μ΄λ° μ μ±
μ μ΅μ
μΌλ‘ κ°μ Έκ°μ§λ§, μλ₯Ό λ€μ΄ ν¬λ‘¬ νμ₯νλ‘κ·Έλ¨ μμμλ μννκ³ μλ€. λΆννκ²λ, μ΄κ²μ μ μ ν ν΄λ¦¬νμ΄ Function
μμ±μμ eval
μ μμ‘΄ν μ μλ€λ κ²μ μλ―Ένλ€.
μ£Όμ:
setTimeout('globalThis = this', 0)
λ κ°μ μ΄μ λ‘ μ μΈλμλ€. κ²λ€κ° μΌλ°μ μΌλ‘ CSPμ μν΄μ λ§νλ€. λνsetTimeout
μ ν΄λ¦¬νμ μ¬μ©νλ κ²μ λ°λνλ μ΄μ κ° λ κ°μ§ λ μλ€. 첫 λ²μ§Έλ ECMAScriptμ μ€νμ΄ μλκ³ λͺ¨λ μλ°μ€ν¬λ¦½νΈ νκ²½μμ μ¬μ©ν μ μλ€. λ λ²μ§Έλ λΉλκΈ°μ μ΄μ΄μsetTimeout
μ΄ λͺ¨λ κ³³μμ μ§μλλ€κ³ νλλΌλ, λ€λ₯Έ μ½λμ μμ‘΄νλ ν΄λ¦¬νμ μ¬μ©νλ κ²μ κ³ ν΅μ€λ¬μΈ κ²μ΄λ€.
μμ κΈ°λ²λ€μ κ²°ν©νμ¬ μλμ κ°μ΄ νλμ ν΄λ¦¬νμ λ§λ€ μ μλ€.
// λ€μ΄ν°λΈ globalThis 보κ°ν. μ΄κ²μ μ¬μ©νμ§ λ§μΈμ!
const getGlobal = () => {
if (typeof globalThis !== 'undefined') return globalThis;
if (typeof self !== 'undefined') return self;
if (typeof window !== 'undefined') return window;
if (typeof global !== 'undefined') return global;
if (typeof this !== 'undefined') return this;
throw new Error('μ μ κ°μ²΄λ₯Ό μ°Ύμ μ μμ΅λλ€');
};
// μ£Όμ: μ μ μ€μ½νμμ μ€νλ λ `globalThis`λ₯Ό μ μ κ°μ²΄λ‘ λ§λ€κΈ° μν΄
// (μ΄νμ (lexical) λ²μμ μ΅μλ¨ λ³μμλ λμ‘°μ μΌλ‘)
// `const` λμ μ `var`λ₯Ό μ¬μ©νλ€.
var globalThis = getGlobal();
νμ§λ§ μ΄ μ½λλ μ격ν λͺ¨λμ ν¨μλ λΈλΌμ°μ κ° μλ νκ²½μ μλ°μ€ν¬λ¦½νΈ λͺ¨λ μμμλ λμνμ§ μλλ€. (globalThis
λ₯Ό μ§μνλ κ²½μ°λ μ μΈ). κ²λ€κ° getGlobal
μ μλͺ»λ κ²°κ³Όλ₯Ό λ°νν μ μλ€. μλνλ©΄ this
μ μμ§νλλ°, this
λ 컨ν
μ€νΈμ μμ‘΄μ μ΄κ³ λ²λ€λ¬μ μν΄μ λ³κ²½λ μ μκΈ° λλ¬Έμ΄λ€.
globalThis
μ κ°λ ₯ν ν΄λ¦¬νμ μμ±ν μ μμκΉ? λ€μκ³Ό κ°μ νκ²½μ΄ μλ€κ³ κ°μ ν΄λ³΄μ.
globalThis
, window
, self
, global
, this
μ μμ‘΄ν μ μλ€.Function
μμ±μμ eval
μ μ¬μ©ν μ μλ€.ν΄κ²°μ± μ μ°Ύμμ§λ§ λ°©μμ΄ μλ¦λ΅μ§λ μλ€. μ΄κ²μ λν΄μ μ μ μκ°ν΄λ³΄μ.
μ μ this
μ μ§μ μ κ·Όνλ λ°©λ²μ λͺ¨λ₯Έμ± μ μ this
μ μ΄λ»κ² μ κ·Όν μ μμκΉ? λ§μ½ globalThis
μ ν¨μ νλ‘νΌν°λ₯Ό μ΄λ»κ²λ μ§μ νκ³ , κ·Έκ²μ globalThis
μ ν¨μλ‘μ¨ νΈμΆνλ€λ©΄, κ·Έ ν¨μ μμμ this
λ₯Ό μ κ·Όν μ μλ€.
globalThis.foo = function() {
return this;
};
var globalThisPolyfilled = globalThis.foo();
globalThis
λ globalThis
λ₯Ό μ°Έμ‘°νλ λ°μΈλ© μμ΄ μ΄λ»κ² κ·Έκ²μ΄ κ°λ₯νκ°? λ€μ μ½λλ μ€ν ν μ μλ€.
function foo() {
return this;
}
var globalThisPolyfilled = foo();
foo()
λ λ μ΄μ ν¨μλ‘ νΈμΆλμ΄μ§ μ μκ³ , λν μμμ μΈκΈνλ―μ΄ μ격ν λͺ¨λλ μλ°μ€ν¬λ¦½νΈ λͺ¨λμμ μ΄ ν¨μ μμ this
λ undefined
μ΄λ€. μ격ν λͺ¨λμ ν¨μλ κ·Έλ€μ this
λ₯Ό undefined
λ‘ μ€μ νλ€. νμ§λ§ getterμ setterμ κ²½μ°λ μλλ€.
Object.defineProperty(globalThis, '__magic__', {
get: function() {
return this;
},
configurable: true // μ΄κ²μ λμ€μ getterλ₯Ό `delete` κ°λ₯νκ² νλ€.
});
// μ£Όμ: μ μ μ€μ½νμμ μ€νλ λ `globalThis`λ₯Ό μ μ κ°μ²΄λ‘ λ§λ€κΈ° μν΄
// (μ΄νμ (lexical) λ²μμ μ΅μλ¨ λ³μμ λμ‘°μ μΌλ‘)
// `const` λμ μ `var`κ° μ¬μ©λμ΄μ§λ€.
var globalThisPolyfilled = __magic__;
delete globalThis.__magic__;
μμ μ½λμμ globalThis
μ getterλ₯Ό μ€μ νκ³ getterλ₯Ό ν΅ν΄μ globalThis
μ μ°Έμ‘°λ₯Ό κ°μ μ¨ λ€μ, λμ΄μ νμμλ getterλ μμ νλ€. μ΄ κΈ°λ²μ μνλ λͺ¨λ μν©μμ globalThis
μ μ κ·Όν μ μμ§λ§, 첫 λ²μ§Έ λΌμΈμμ μ¬μ ν (μ¬κΈ°μλ globalThis
λΌκ³ λΆλ₯΄λ) μ μ this
μ°Έμ‘°μ μμ‘΄νκ³ μλ€. μ΄ μμ‘΄μ±μ νΌν μ μμ κΉ? globalThis
μ μ§μ μ κ·Όνμ§ μκ³ getterλ₯Ό μ μμ μΌλ‘ μ€μ ν μ μμ κΉ?
globalThis
μ getterλ₯Ό μ€μ νλ κ² λμ μ, μ μ this
κ°μ²΄λ₯Ό Object.prototype
μΌλ‘ μμλ°μμ getterλ₯Ό μ€μ ν μ μλ€.
Object.defineProperty(Object.prototype, '__magic__', {
get: function() {
return this;
},
configurable: true // μ΄κ²μ λμ€μ getterλ₯Ό `delete` κ°λ₯νκ² νλ€.
});
// μ£Όμ: μ μ μ€μ½νμμ μ€νλ λ `globalThis`λ₯Ό μ μ κ°μ²΄λ‘ λ§λ€κΈ° μν΄
// (μ΄νμ (lexical) λ²μμ μ΅μλ¨ λ³μμ λμ‘°μ μΌλ‘)
// `const` λμ μ `var`κ° μ¬μ©λμ΄μ§λ€.
var globalThis = __magic__;
delete Object.prototype.__magic__;
μ£Όμ: μ¬μ€ ECMAScript μ€νμ μ μ
this
κ°Object.prototype
μ μμ λ°λλ€λ λ΄μ©μ μκ³ , λ¨μ§ κ°μ²΄μ¬μΌ νλ€κ³ λͺ μλμ΄ μλ€.Object.create(null)
μObject.prototype
μ μμ λ°μ§ μμ κ°μ²΄λ₯Ό λ§λ λ€. μλ°μ€ν¬λ¦½νΈ μμ§μObject.prototype
λ₯Ό μμλ°μ§ μλ κ°μ²΄λ₯Όthis
λ‘ μ¬μ©νλλΌλ μ€νμ μλ°°λμ§ μμΌλ©°, μ΄ κ²½μ° μμ κ°μ μ½λλ μ¬μ ν λμνμ§ μμ κ²μ΄λ€. (μ€μ λ‘ IE 7μ κ·Έλ κ² νλ€.) μ΄ μ’κ², μ’ λ μ΅μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μ μthis
κ°Object.prototype
μ prototype 체μΈμΌλ‘ κ°μ ΈμΌλ§ νλ€κ³ λμν κ²μΌλ‘ 보μΈλ€.
globalThis
λ₯Ό μ΄λ―Έ μ¬μ©ν μ μλ μ΅μ μ νκ²½μμλ Object.prototype
κ° λ³ν(mutating)νλ κ²μ λ§κΈ° μν΄μ ν΄λ¦¬νμ μλμ κ°μ΄ μμ ν μ μλ€.
(function() {
if (typeof globalThis === 'object') return;
Object.defineProperty(Object.prototype, '__magic__', {
get: function() {
return this;
},
configurable: true // μ΄κ²μ λμ€μ getterλ₯Ό `delete` κ°λ₯νκ² νλ€.
});
__magic__.globalThis = __magic__; // lolwat
delete Object.prototype.__magic__;
}());
// μ΄μ μ½λμμ `globalThis`λ₯Ό μ¬μ©ν μ μλ€.
console.log(globalThis);
νΉμ __defineGetter__
λ₯Ό μ¬μ©ν μ μλ€.
function() {
if (typeof globalThis === 'object') return;
Object.prototype.__defineGetter__('__magic__', function() {
return this;
});
__magic__.globalThis = __magic__; // lolwat
delete Object.prototype.__magic__;
}());
// μ΄μ μ½λμμ `globalThis`λ₯Ό μ¬μ©ν μ μλ€.
console.log(globalThis);
μ΄κ²μ μ§κΈκΉμ§ λ³Έ ν΄λ¦¬ν μ€ κ°μ₯ λμ°ν κ²μ΄λ€. μμ νμ§ μμ κ°μ²΄(object)λ λ³κ²½νμ§ μλ κ²μ΄ κ΄νμΈλ°, μ΄ ν΄λ¦¬νμ μ΄λ° κ΄νμ μμ ν 무μνλ€. μλ°μ€ν¬λ¦½νΈ μμ§μ κΈ°λ³Έ μλ¦¬μΈ νλ‘ν νμ μ΅μ νμμ μ€λͺ νλ―μ΄ λ΄μ₯λ νλ‘ν νμ μ λ³κ²½νλ κ²μ μΌλ°μ μΌλ‘ λμ μκ°μ΄λ€.
λ°λ©΄μ μ΄ ν΄λ¦¬νμ κΉ¨λ¨λ¦΄ μ μΌν λ°©λ²μ ν΄λ¦¬νμ΄ μ€νλκΈ° μ μ λκ΅°κ°κ° Object
λλ Object.defineProperty
(λλ Object.prototype.__defineGetter__
)λ₯Ό λ³κ²½νλ κ²μ΄λ€. λλ μ΄λ³΄λ€ λ κ°λ ₯ν ν΄λ¦¬νμ μκ°ν΄λΌ μ μλ€. μ¬λ¬λΆμ μ΄λ νκ°?
μ΄ ν΄λ¦¬νμ λ²μ©μ μΈ μλ°μ€ν¬λ¦½νΈμ ν₯λ―Έλ‘μ΄ μμ΄λ€. ν΄λ¦¬νμ μμν μλ°μ€ν¬λ¦½νΈ μ½λλ‘ νΈμ€νΈ λΉνΈμΈ κΈ°λ₯μ μμ‘΄νμ§ μκ³ ECMAScriptκ° κ΅¬νλ μ΄λ νκ²½μμλ μ€νλ μ μλ€. μ΄κ²μ μ μ΄μ ν΄λ¦¬νμ λͺ©ν μ€ νλμλ€. μ€μ λ‘ μ΄κ²μ΄ λμνλμ§ νμΈν΄λ³΄μ.
μ¬κΈ°μ μ΄ ν΄λ¦¬νμ μν HTML λ°λͺ¨ νμ΄μ§κ° μλ€. μ΄ λ°λͺ¨μμλ κ³ μ μ μΈ μ€ν¬λ¦½νΈμΈ globalthis.js
μ λμΌν μ½λλ‘ λͺ¨λλ°©μμΈ globalthis.mjs
λ₯Ό μ¬μ©νμ¬ globalThis
λ₯Ό μΆλ ₯νλ€. μ΄ λ°λͺ¨λ ν΄λ¦¬νμ΄ λΈλΌμ°μ μμ λμνλμ§ νμΈνλ λ° μ¬μ©λ μ μλ€. globalThis
λ κΈ°λ³Έμ μΌλ‘ Chrome 71 / V8 v7.1, Firefox 65, Safari 12.1, iOS Safari 12.2μμ μ§μνλ€. ν΄λ¦¬νμ ν₯λ―Έλ‘μ΄ λΆλΆμ ν
μ€νΈνκΈ° μν΄μλ μ΄μ λ²μ μ λΈλΌμ°μ μμ λ°λͺ¨νμ΄μ§λ₯Ό μ΄μ΄μΌνλ€.
μ£Όμ: μ΄ ν΄λ¦¬νμ μΈν°λ· μ΅μ€νλ‘λ¬ 10 μ΄νμ λ²μ μμλ λμνμ§ μλλ€. μ΄ λΈλΌμ°μ λ€μμλ
__magic__
μ΄ μ μthis
μ μ°Έμ‘°λ‘ λμν¨μλ λΆκ΅¬νκ³ ,__magic__.globalThis = __magic__
μΌλ‘ μ΄λ»κ²λ μ§globalThis
κ° μ μμΌλ‘ μ¬μ© κ°λ₯νκ² λ§λ€μ΄μ£Όμ§ μλλ€. μ¦__magic__
κ³Όwindow
κ° λͺ¨λ[object Window]
μ΄μ§λ§__magic__ !== window
λΌλ μ¬μ€μ΄λ€. μ΄κ²μ μ΄ λΈλΌμ°μ λ€μ΄ μ μ κ°μ²΄μ μ μthis
μ¬μ΄μ μ°¨μ΄μ λν΄ νΌλλ μ μμμ λνλΈλ€. μ΄μ μ λμλ€ μ€ νλλ‘ ν΄λ¦¬νμ μμ νλ©΄ IE10κ³Ό IE 9μμ λμνλ€. IE 8μ μ§μνκΈ° μν΄μλObject.defineProperty
νΈμΆνλ λΆλΆμtry
-catch
λ¬ΈμΌλ‘ κ°μΈκ³catch
λΈλ‘μμ μ΄μ μ λμλ€ μ€ νλλ₯Ό μ¬μ©νλ©΄ λλ€. (μ΄λ κ² νλ κ²μ μ μthis
κ°Object.prototype
μ μμ λ°μ§ μλ IE 7 μ΄μ λν νΌν μ μλ€. IEμ μ΄μ λ²μ μμ μ΄ λ°λͺ¨λ₯Ό μ€νμμΌ λ³΄μλΌ)
Node.jsμ λ 립ν μλ°μ€ν¬λ¦½νΈ μμ§μμ ν μ€νΈνκΈ° μν΄μλ λμΌν μλ°μ€ν¬λ¦½νΈ νμΌμ λ€μ΄λ‘λ νλ€.
# ν΄λ¦¬νκ³Ό λ°λͺ¨ μ½λλ₯Ό λͺ¨λλ‘ λ€μ΄λ‘λ ν΄λΌ
curl https://mathiasbynens.be/demo/globalthis.mjs > globalthis.mjs
# μ΄ νμΌμ κ³ μ μ μΈ μλ°μ€ν¬λ¦½νΈ νμΌλ‘ μ¬μ©ν μ μλλ‘ λ³΅μ¬(μ¦, symlink) ν΄λΌ
ln -s globalthis.mjs globalthis.js
μ΄μ node
μμ ν
μ€νΈν μ μλ€.
$ node --experimental-modules --no-warnings globalthis.mjs
Testing the polyfill in a module
[object global]
$ node globalthis.js
Testing the polyfill in a classic script
[object global]
λ
립ν μλ°μ€ν¬λ¦½νΈ μμ§ μμμ ν
μ€νΈνκΈ° μν΄μλ jsvu
λ₯Ό μ¬μ©ν΄μ μνλ μμ§μ μ€μΉνκ³ μ€ν¬λ¦½νΈλ₯Ό λ°λ‘ μ€νν μ μλ€. μλ₯Ό λ€μ΄ (globalThis
λ₯Ό μ§μνμ§ μλ) V8μ 7.0λ²μ κ³Ό (globalThis
λ₯Ό μ§μνλ) 7.1λ²μ μμ ν
μ€νΈνκΈ° μν΄μλ μλμ κ°μ΄ νλ©΄λλ€.
$ jsvu v8@7.0 # Install the `v8-7.0.276` binary.
$ v8-7.0.276 globalthis.mjs
Testing the polyfill in a module
[object global]
$ v8-7.0.276 globalthis.js
Testing the polyfill in a classic script
[object global]
$ jsvu v8@7.1 # Install the `v8-7.1.302` binary.
$ v8-7.1.302 globalthis.js
Testing the polyfill in a classic script
[object global]
$ v8-7.1.302 globalthis.mjs
Testing the polyfill in a module
[object global]
μ΄μ κ°μ κΈ°μ λ‘ JavaScriptCore, SpiderMonkey, Chakra κ·Έλ¦¬κ³ XSμ κ°μ λ€λ₯Έ μλ°μ€ν¬λ¦½νΈ μμ§μμ ν μ€νΈν μ μλ€. μ¬κΈ° JavaScriptCoreλ₯Ό μ¬μ©ν μμ κ° μλ€.
$ jsvu # Install the `javascriptcore` binary.
$ javascriptcore globalthis.mjs
Testing the polyfill in a module
[object global]
$ javascriptcore globalthis.js
Testing the polyfill in a classic script
[object global]
μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ κ²μ κΉλ€λ‘κ³ , μ’
μ’
λ
μ°½μ μΈ λ°©λ²μ μꡬνλ€. globalThis
λ μ μ this
μ μ½κ² μ κ·Όν μ μκ² ν΄μ€λ€. μ ννκ² λμνλ globalThis
ν΄λ¦¬νμ λ³΄κΈ°λ³΄λ¨ μ’ λ λμ μ μ΄μ§λ§, λμνλ ν΄κ²°μ±
μ΄ μλ€.
μ λ§λ‘ νμν λλ§ μ΄ ν΄λ¦¬νμ μ¬μ©ν΄λΌ. μλ°μ€ν¬λ¦½νΈ λͺ¨λμ μ μ μνλ₯Ό λ³κ²½νμ§ μκ³ κΈ°λ₯μ μ½κ² κ°μ Έμ€κ±°λ λ΄λ³΄λΌ μ μλ€. λλΆλΆμ μ΅μ μλ°μ€ν¬λ¦½νΈ μ½λλ μ μ this
μ μ κ·Όμ νμλ‘ νμ§ μλλ€. globalThis
λ λΌμ΄λΈλ¬λ¦¬μ ν΄λ¦¬νμμλ§ μ μ©νλ€.
globalThis
ν΄λ¦¬νμ΄ κΈμ κ²μν μ΄νμ λ€μκ³Ό κ°μ npm ν¨ν€μ§κ° μ΄ κΈ°μ μ μ΄μ©ν΄μ globalThis
ν΄λ¦¬νμ μ 곡νκΈ° μμνλ€.
μ°Έκ³ : λλ μ΄ ν¨ν€μ§λ€ μ€ μ΄λ ν κ²μ μ μλ κ΄λ¦¬μλ μλλ€.