This value in Javascript
μλ°μ€ν¬λ¦½νΈμ ν¨μλ νΈμΆλ λ, λ§€κ°λ³μλ‘ μ λ¬λλ μΈμκ° μ΄μΈμ, arguments κ°μ²΄μ thisλ₯Ό μ λ¬λ°λλ€.
function example(someNumber) {
console.log(arguments);
console.log(this);
console.log(someNumber);
}
example(2)
----------------------------------------------------------
[Arguments] { '0': 2 }
<ref *1> Object [global] {
global: [Circular *1],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setInterval: [Function: setInterval],
setTimeout: [Function: setTimeout] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
queueMicrotask: [Function: queueMicrotask],
performance: Performance {
nodeTiming: PerformanceNodeTiming {
name: 'node',
entryType: 'node',
startTime: 0,
duration: 26.50162499397993,
nodeStart: 0.9319169968366623,
v8Start: 1.9625839963555336,
bootstrapComplete: 19.07591699808836,
environment: 10.603083997964859,
loopStart: -1,
loopExit: -1,
idleTime: 0
},
timeOrigin: 1669163218176.664
},
clearImmediate: [Function: clearImmediate],
setImmediate: [Function: setImmediate] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
}
}
2μλ°μ€ν¬λ¦½νΈμ κ²½μ° Javaμ κ°μ΄ thisμ λ°μΈλ©λλ κ°μ²΄λ νκ°μ§κ° μλλΌ ν΄λΉ ν¨μ νΈμΆ λ°©μμ λ°λΌ thisμ λ°μΈλ©λλ κ°μ²΄κ° λ¬λΌμ§λ€.
ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©μμΈ Lexical ScopeλΌλ κ²μ΄ μλ€.
μ΄λ₯Ό μ€λͺ νκΈ° μν΄μ λ¨Όμ μ€μ½νλΆν° μ§κ³ λμ΄κ°μ.
μ€μ½ν
μ€μ½νλ μλ°μ€ν¬λ¦½νΈλ₯Ό ν¬ν¨ν λͺ¨λ νλ‘κ·Έλλ° μΈμ΄μ κΈ°λ³Έμ μΈ κ°λ μ΄λ€.
μ΄λ¦μ΄ κ°μ λ³μ xκ° μ μμμ 1λ², ν¨μ λ΄λΆμμ 1λ² μ μΈλμλ€.
μ°λ¦¬λ μ΄λ―Έ ν¨μ λ΄λΆμμλ function scope, μ μμμλ global scopeκ° μΆλ ₯λ리λΌλ κ²μ μκ³ μλ€.
μ€μ½νλ μ°Έμ‘° λμ μλ³μλ₯Ό μ°Ύμλ΄κΈ° μν κ·μΉμ΄λ€. μλ°μ€ν¬λ¦½νΈλ μ΄ κ·μΉλλ‘ μλ³μλ₯Ό μ°Ύλλ€.
μ μμ μμ μ μμ μ μΈλ λ³μ xλ μ΄λμλ μ°Έμ‘°ν μ μλ€.
νμ§λ§ ν¨μ foo λ΄μμ μ μΈλ λ³μ xλ ν¨μ foo λ΄λΆμμλ§ μ°Έμ‘°ν μ μκ³ ν¨μ μΈλΆμμλ μ°Έμ‘°ν μ μλ€. μ΄λ¬ν κ·μΉμ μ€μ½νλΌκ³ νλ€.
μλ°μ€ν¬λ¦½νΈμ μ€μ½νλ₯Ό ꡬλΆν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΄ 2 κ°μ§λ‘ λλ μ μλ€.
μ μ μ€μ½ν
μ½λ μ΄λμμλ μ§ μ°Έμ‘° κ°λ₯
μ§μ μ€μ½ν
ν¨μ μ½λ λΈλ‘μ΄ λ§λ μ€μ½ν, ν¨μ μμ κ³Ό νμ ν¨μμμ μ°Έμ‘° κ°λ₯
λ³μμ κ΄μ μμ μ€μ½νλ₯Ό ꡬλΆνλ©΄ λ€μκ³Ό κ°μ΄ λλ μ μλ€.
μ μ λ³μ
μ μμμ μ μΈλ λ³μ, μ΄λμλ μ°Έμ‘° κ°λ₯
μ§μ λ³μ
μ§μ(ν¨μ)λ΄μμ μ μΈλ λ³μμ΄λ©° κ·Έ μ§μκ³Ό κ·Έ μ§μμ νλΆ μ§μμμλ§ μ°Έμ‘°ν μ μλ€.
λ³μλ μ μΈ μμΉμ μν΄ μ€μ½νλ₯Ό κ°μ§κ² λλ€.
μ¦, μ μμμ μ μΈλ λ³μλ μ μ μ€μ½νλ₯Ό κ°λ μ μ λ³μκ° λκ³ , μ§μμμ μ μΈλ λ³μλ μ§μ μ€μ½νλ₯Ό κ°λ μ§μ λ³μκ° λλ€.
μλ°μ€ν¬λ¦½νΈμ μ€μ½νλ ν μΈμ΄μλ λ€λ₯Έ νΉμ§μ΄ μλ€.
C-Family languageλ λΈλ‘λ 벨 μ€μ½νλ₯Ό λ°λ₯΄μ§λ§, μλ°μ€ν¬λ¦½νΈλ ν¨μλ 벨 μ€μ½νλ₯Ό λ°λ₯Έλ€.
λΈλ‘λ 벨 μ€μ½ν : μ½λ λΈλ‘ λ΄μμλ§ μ ν¨νλ€.
ν¨μλ 벨 μ€μ½ν : ν¨μ μ½λ λΈλ‘ λ΄μμλ§ μ ν¨νκ³ ν¨μ μΈλΆμμλ μ ν¨νμ§ μμ
μμ μμμμ xλ ν¨μλ 벨 μ€μ½νλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ xλ 1μ΄ κ·Έλλ‘ μΆλ ₯λκ³ , yλ λΈλ‘λ 벨 μ€μ½νλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ 0μ΄ μΆλ ₯λλ€.
μμΈν μ¬νμ let-var-const μ λν΄μ μμ보면 μ’λ€.
λΉ λΈλ‘λ 벨 μ€μ½ν
μμ μ½λλ λλκ²λ μλ¬ μμ΄ μ€νμ΄ λλ€.
μλ°μ€ν¬λ¦½νΈλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό μ¬μ©νμ§ μμΌλ―λ‘ ν¨μ λ°μμ μ μΈλ λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈλμλ€ ν μ§λΌλ λͺ¨λ μ μ μ€μ½νλ₯Ό κ°μ§λ€.
λ°λΌμ λ³μ iλ μ μ λ³μμ΄λ€.
ν¨μ λ 벨 μ€μ½ν
μλ°μ€ν¬λ¦½νΈλ ν¨μ λ 벨 μ€μ½νλ₯Ό μ¬μ©νλ€.
μ¦, ν¨μ λ΄μμ μ μΈλ λ§€κ°λ³μμ λ³μλ ν¨μ μΈλΆμμλ μ ν¨νμ§ μλ€. λ°λΌμ λ³μ bλ μ§μ λ³μμ΄λ€.
μ μ μμμμλ μ μλ³μλ§, μ§μ μμμμλ μ§μλ³μμ μ μλ³μ λͺ¨λ μ°Έμ‘°κ° κ°λ₯νλ€.
κ·Έλ¬λ λ³μλͺ μ΄ μ€λ³΅λλ κ²½μ°, μ§μ λ³μλ₯Ό μ°μ νμ¬ μ°Έκ³ νλ€.
λ΄λΆ ν¨μλ μμ μ ν¬ν¨νκ³ μλ μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μλ€.
μμ ν¨μ barμμ μ°Έμ‘°νλ λ³μ xλ ν¨μ fooμμ μ μΈλ μ§μλ³μμ΄λ€.
μ΄λ μ€ν 컨ν μ€νΈμ μ€μ½ν 체μΈμ μν΄ μ°Έμ‘° μμμμ μ μλ³μ xκ° λ€λ‘ λ°λ ΈκΈ° λλ¬Έμ΄λ€.
λ μ컬 μ€μ½ν
μμ μ€μ½νμ κ²°μ μ Lexical Scopeμ μν΄ μ΄λ£¨μ΄μ§λ€κ³ νλ©΄μ μ€μ½νμ λν μ€λͺ μ νλ€.
μλ°μ€ν¬λ¦½νΈλ₯Ό λΉλ‘―ν λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄λ λ μ컬 μ€μ½νλ₯Ό λ°λ₯΄λλ°, ν¨μλ₯Ό μ΄λμ μ μΈνμλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νλ€.
λ μ컬 μ€μ½νλ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλλΌ μ΄λμ μ μΈνμλμ§μ λ°λΌ κ²°μ λλ€.
λ°λΌμ ν¨μ barμ μμ μ€μ½νλ μ μ μ€μ½νμ΄κ³ μ μμ λ μ μ λ³μ xμ κ° 1μ λλ² μΆλ ₯νλ€.
μ, μ΄μ λ€μ λμμμ thisμ λν μ΄μΌκΈ°λ₯Ό ν΄λ³΄μ.
ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©μμΈ λ μ컬 μ€μ½νλ ν¨μλ₯Ό μ μΈν λ κ²°μ λκ³ , μ΄λ this λ°μΈλ©κ³Ό λ€λ₯΄λ€.
thisλ ν¨μκ° νΈμΆλ λ μ΄λ»κ² νΈμΆλμλμ§μ λ°λΌ λμ μΌλ‘ κ²°μ λλ€.
ν¨μλ₯Ό νΈμΆνλ λ°©μμ λ€μνλ€. ν λ² νλμ© μ°¨κ·Όμ°¨κ·Ό λ€λ£¨μ΄λ³΄μ.
μΌλ¨ ν¬κ² μλ λ°©μμΌλ‘ μΌμ΄μ€λ₯Ό λλμ΄λ³΄μ.
ν¨μ νΈμΆ
μ μ κ°μ²΄λ λͺ¨λ κ°μ²΄μ μ μΌν μ΅μμ κ°μ²΄λ‘, μΌλ°μ μΌλ‘ Browser-sideμμλ window , Server-side(Node.js)μμλ global κ°μ²΄λ₯Ό μλ―Ένλ€.
μ μκ°μ²΄λ μ μ μ€μ½ν(Global Scope)λ₯Ό κ°λ μ μλ³μ(Global variable)λ₯Ό νλ‘νΌν°λ‘ μμ νλ€.
κΈλ‘λ² μμμ μ μΈν ν¨μλ μ μκ°μ²΄μ νλ‘νΌν°λ‘ μ κ·Όν μ μλ μ μ λ³μμ λ©μλμ΄λ€.
κΈ°λ³Έμ μΌλ‘ thisλ μ μκ°μ²΄(Global object)μ λ°μΈλ©λλ€. μ μν¨μλ λ¬Όλ‘ μ΄κ³ μ¬μ§μ΄ λ΄λΆν¨μμ κ²½μ°λ thisλ μΈλΆν¨μκ° μλ μ μκ°μ²΄μ λ°μΈλ©λλ€.

λ΄λΆν¨μλ μΌλ° ν¨μ, λ©μλ, μ½λ°±ν¨μ μ΄λμμ μ μΈλμλ κ΄κ²μμ΄ thisλ μ μκ°μ²΄λ₯Ό λ°μΈλ©νλ€.
λκΈλΌμ€ ν¬λ½ν¬λλ βμ΄κ²μ μ€κ³ λ¨κ³μ κ²°ν¨μΌλ‘ λ©μλκ° λ΄λΆν¨μλ₯Ό μ¬μ©νμ¬ μμ μ μμ μ λκ² ν μ μλ€λ κ²μ μλ―Ένλ€β λΌκ³ λ§νλ€.
λ΄λΆν¨μμ thisκ° μ μκ°μ²΄λ₯Ό μ°Έμ‘°νλ κ²μ ννΌλ°©λ²μ μλμ κ°λ€.

μ λ°©λ² μ΄μΈμλ μλ°μ€ν¬λ¦½νΈλ thisλ₯Ό λͺ μμ μΌλ‘ λ°μΈλ©ν μ μλ apply, call, bind λ©μλλ₯Ό μ 곡νλ€.
λ©μλ νΈμΆ
ν¨μκ° κ°μ²΄μ νλ‘νΌν° κ°μ΄λ©΄ λ©μλλ‘μ νΈμΆλλ€. μ΄λ λ©μλ λ΄λΆμ thisλ ν΄λΉ λ©μλλ₯Ό μμ ν κ°μ²΄, μ¦ ν΄λΉ λ©μλλ₯Ό νΈμΆν κ°μ²΄μ λ°μΈλ©λλ€.

μμ±μ ν¨μ νΈμΆ
μλ°μ€ν¬λ¦½νΈμ μμ±μ ν¨μλ λ§ κ·Έλλ‘ κ°μ²΄λ₯Ό μμ±νλ μν μ νλ€.
νμ§λ§ μλ°μ κ°μ κ°μ²΄μ§ν₯ μΈμ΄μ μμ±μ ν¨μμλ λ€λ₯΄κ² κ·Έ νμμ΄ μ ν΄μ Έ μλ κ²μ΄ μλλΌ κΈ°μ‘΄ ν¨μμ new μ°μ°μλ₯Ό λΆμ¬μ νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘ λμνλ€.
μ΄λ λ°λλ‘ μκ°νλ©΄ μμ±μ ν¨μκ° μλ μΌλ° ν¨μμ new μ°μ°μλ₯Ό λΆμ¬ νΈμΆνλ©΄ μμ±μ ν¨μμ²λΌ λμν μ μλ€.
λ°λΌμ μΌλ°μ μΌλ‘ μμ±μ ν¨μλͺ μ 첫문μλ₯Ό λλ¬Έμλ‘ κΈ°μ νμ¬ νΌλμ λ°©μ§νλ €λ λ Έλ ₯μ νλ€.
new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ this λ°μΈλ©μ΄ λ©μλλ ν¨μ νΈμΆ λμλ λ€λ₯΄κ² λμνλ€.
λΉ κ°μ²΄ μμ± λ° this λ°μΈλ©
μμ±μ ν¨μμ μ½λκ° μ€νλκΈ° μ λΉ κ°μ²΄κ° μμ±λλ€.
μ΄ λΉ κ°μ²΄κ° μμ±μ ν¨μκ° μλ‘ μμ±νλ κ°μ²΄μ΄λ€. μ΄ν μμ±μ ν¨μ λ΄μμ μ¬μ©λλ thisλ μ΄ λΉ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
κ·Έλ¦¬κ³ μμ±λ λΉ κ°μ²΄λ μμ±μ ν¨μμ prototype νλ‘νΌν°κ° κ°λ¦¬ν€λ κ°μ²΄λ₯Ό μμ μ νλ‘ν νμ κ°μ²΄λ‘ μ€μ νλ€.
thisλ₯Ό ν΅ν νλ‘νΌν° μμ±
μμ±λ λΉ κ°μ²΄μ thisλ₯Ό μ¬μ©νμ¬ λμ μΌλ‘ νλ‘νΌν°λ λ©μλλ₯Ό μμ±ν μ μλ€.
thisλ μλ‘ μμ±λ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ―λ‘ thisλ₯Ό ν΅ν΄ μμ±ν νλ‘νΌν°μ λ©μλλ μλ‘ μμ±λ κ°μ²΄μ μΆκ°λλ€.
μμ±λ κ°μ²΄ λ°ν
λ°νλ¬Έμ΄ μλ κ²½μ°, thisμ λ°μΈλ©λ μλ‘ μμ±ν κ°μ²΄κ° λ°νλλ€. λͺ μμ μΌλ‘ thisλ₯Ό λ°ννμ¬λ κ²°κ³Όλ κ°λ€.
λ°νλ¬Έμ΄ thisκ° μλ λ€λ₯Έ κ°μ²΄λ₯Ό λͺ μμ μΌλ‘ λ°ννλ κ²½μ°, thisκ° μλ ν΄λΉ κ°μ²΄κ° λ°νλλ€.
μ΄ λ thisλ₯Ό λ°ννμ§ μμ ν¨μλ μμ±μ ν¨μλ‘μμ μν μ μννμ§ λͺ»νλ€. λ°λΌμ μμ±μ ν¨μλ λ°νλ¬Έμ λͺ μμ μΌλ‘ μ¬μ©νμ§ μλλ€.

apply/call/bind νΈμΆ
thisμ λ°μΈλ©λ κ°μ²΄λ ν¨μ νΈμΆ ν¨ν΄μ μν΄ κ²°μ λλ€.
μ΄λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μννλ κ²μ΄λ€.
μ΄λ¬ν μλ°μ€ν¬λ¦½νΈ μμ§μ μ묡μ this λ°μΈλ© μ΄μΈμ thisλ₯Ό νΉμ κ°μ²΄μ λͺ μμ μΌλ‘ λ°μΈλ©νλ λ°©λ²λ μ 곡λλ€.
μ΄κ²μ κ°λ₯νκ² νλ κ²μ΄
Function.prototype.apply
Function.prototype.call
λ©μλμ΄λ€.
μ΄ λ©μλλ€μ λͺ¨λ ν¨μ κ°μ²΄μ νλ‘ν νμ κ°μ²΄μΈ Function.prototype κ°μ²΄μ λ©μλμ΄λ€.
κΈ°μ΅ν΄μΌ ν κ²μ apply() λ©μλλ₯Ό νΈμΆνλ 주체λ ν¨μμ΄λ©° apply() λ©μλλ thisλ₯Ό νΉμ κ°μ²΄μ λ°μΈλ©ν λΏ λ³Έμ§μ μΈ κΈ°λ₯μ ν¨μ νΈμΆμ΄λΌλ κ²μ΄λ€.

Sources β¦
Last updated