π Chapter 2: μ€ν 컨ν μ€νΈ
- μ€ν 컨ν μ€νΈ(execution context)λ μ€νν μ½λμ μ 곡ν νκ²½ μ 보λ€μ λͺ¨μλμ κ°μ²΄λ‘, μλ°μ€ν¬λ¦½νΈμ λμ μΈμ΄λ‘μμ μ±κ²©μ κ°μ₯ μ νμ ν μ μλ κ°λ μ΄λ€.
- μλ°μ€ν¬λ¦½νΈλ μ΄λ€ μ€ν 컨ν
μ€νΈκ° νμ±νλλ μμ μ μ μΈλ λ³μλ₯Ό μλ‘ λμ΄μ¬λ¦¬κ³ (νΈμ΄μ€ν
), μΈλΆ νκ²½ μ 보λ₯Ό ꡬμ±νκ³ ,
this
κ°μ μ€μ νλ λ±μ λμμ μννλ€.
π μ€ν 컨ν μ€νΈλ?β
- μ€ν 컨ν μ€νΈ(execution context)λ μ€νν μ½λμ μ 곡ν νκ²½ μ 보λ€μ λͺ¨μλμ κ°μ²΄μ΄λ€.
- λμΌν νκ²½μ μλ μ½λλ€μ μ€νν λ νμν νκ²½ μ 보λ€μ λͺ¨μ 컨ν μ€νΈλ₯Ό ꡬμ±νκ³ , μ΄λ₯Ό μ½ μ€νμ μμμ¬λ Έλ€κ°, κ°μ₯ μμ μμ¬μλ 컨ν μ€νΈμ κ΄λ ¨ μλ μ½λλ€μ μ€ννλ μμΌλ‘ μ 체 μ½λμ νκ²½κ³Ό μμλ₯Ό 보μ₯νλ€.
// μ€ν 컨ν
μ€νΈμ μ½ μ€ν
// ------------------ (1)
var a = 1;
function outer() {
function inner() {
console.log(a); // undefined
var a = 3;
}
inner(); // ------------ (2)
console.log(a); // 1
}
outer(); // ------------ (3)
console.log(a); // 1
- μ μμ μ κ°μ΄ μ²μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€ννλ μκ°
(1)
μ μ 컨ν μ€νΈκ° μ½ μ€νμ λ΄κΈ΄λ€. μ΅μλ¨μ 곡κ°μ μ½λ λ΄λΆμμ λ³λμ μ€ν λͺ λ Ήμ΄ μμ΄λ λΈλΌμ°μ μμ μλμΌλ‘ μ€ννλ―λ‘ μλ°μ€ν¬λ¦½νΈ νμΌμ΄ μ΄λ¦¬λ μκ° μ μ 컨ν μ€νΈκ° νμ±νλλ€. - μ½ μ€νμλ μ μ 컨ν
μ€νΈ μΈμ λ€λ₯Έ λ©μ΄λ¦¬κ° μμΌλ―λ‘ μ μ 컨ν
μ€νΈμ κ΄λ ¨λ μ½λλ€μ μμ°¨λ‘ μ§ννλ€κ°
(3)
μμouter
ν¨μλ₯Ό νΈμΆνλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μouter
μ λν νκ²½ μ 보λ₯Ό μμ§ν΄μouter
μ€ν 컨ν μ€νΈλ₯Ό μμ±ν ν μ½ μ€νμ λ΄λλ€. - μ½ μ€νμ 맨 μμ
outer
μ€ν 컨ν μ€νΈκ° λμΈ μνκ° λμΌλ―λ‘ μ μ 컨ν μ€νΈμ κ΄λ ¨λ μ½λμ μ€νμ μΌμ μ€λ¨νκ³ λμouter
μ€ν 컨ν μ€νΈμ κ΄λ ¨λ μ½λ, μ¦outer
ν¨μ λ΄λΆμ μ½λλ€μ μμ°¨μ μΌλ‘ μ€ννλ€. - λ€μ
(2)
μμinner
ν¨μμ μ€ν 컨ν μ€νΈκ° μ½ μ€νμ κ°μ₯ μμ λ΄κΈ°λ©΄outer
컨ν μ€νΈμ κ΄λ ¨λ μ½λμ μ€νμ μ€λ¨νκ³inner
ν¨μ λ΄λΆμ μ½λλ₯Ό μμλλ‘ μ§ννλ€. inner
ν¨μ λ΄λΆμμa
λ³μμ κ° 3μ ν λΉνκ³ λλ©΄inner
ν¨μμ μ€νμ΄ μ’ λ£λλ©΄μinner
μ€ν 컨ν μ€νΈκ° μ½ μ€νμμ μ κ±°λλ€. κ·Έ ν(2)
μ λ€μ μ€λΆν° μ΄μ΄μ μ€ννλ€.a
λ³μμ κ°μ μΆλ ₯νκ³ λλ©΄outer
ν¨μμ μ€νμ΄ μ’ λ£λμ΄outer
μ€ν 컨ν μ€νΈκ° μ½ μ€ν μμ μ κ±°λκ³ ν΄ μ€νμλ μ μ 컨ν μ€νΈλ§ λ¨μ μκ² λλ€.- κ·Έλ° λ€μ, μ€νμ μ€λ¨νλ
(3)
μ λ€μ μ€λΆν° μ΄μ΄μ μ€ννλ€.a
λ³μμ κ°μ μΆλ ₯νκ³ λλ©΄ μ μ 곡κ°μ λλ μ€νν μ½λκ° λ¨μ μμ§ μμ μ μ 컨ν μ€νΈλ μ κ±°λκ³ , μ½ μ€νμλ μ무κ²λ λ¨μ§ μμ μνλ‘ μ’ λ£λκ² λλ€.
- μ΄λ κ² μ΄λ€ μ€ν 컨ν
μ€νΈκ° νμ±νλ λ μλ°μ€ν¬λ¦½νΈ μμ§μ ν΄λΉ 컨ν
μ€νΈμ κ΄λ ¨λ μ½λλ€μ μ€ννλ λ° νμν νκ²½ μ 보λ€μ μμ§ν΄μ μ€ν 컨ν
μ€νΈ κ°μ²΄μ μ μ₯νλ€. μ΄ κ°μ²΄λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ νμ©ν λͺ©μ μΌλ‘ μμ±ν λΆ κ°λ°μκ° μ½λλ₯Ό ν΅ν΄ νμΈν μ μλ€. μ¬κΈ°μ λ΄κΈ°λ μ 보λ€μ λ€μκ³Ό κ°λ€.
VariableEnvironment
: νμ¬ μ»¨ν μ€νΈ λ΄μ μλ³μλ€μ λν μ 보 + μΈλΆ νκ²½ μ 보. μ μΈ μμ μLexicalEnvironment
μ μ€λ μ·μΌλ‘, λ³κ²½ μ¬νμ λ°μλμ§ μμ.LexicalEnvironment
: μ²μμλVariableEnvironment
μ κ°μ§λ§ λ³κ²½ μ¬νμ΄ μ€μκ°μΌλ‘ λ°μλ¨.ThisBinding
:this
μλ³μκ° λ°λΌλ΄μΌ ν λμ κ°μ²΄.
π VariableEnvironmentβ
VariableEnvironment
μ λ΄κΈ°λ λ΄μ©μLexicalEnvironment
μ κ°μ§λ§ μ΅μ΄ μ€ν μμ μ€λ μ·μ μ μ§νλ€λ μ μ΄ λ€λ₯΄λ€.- μ€ν 컨ν
μ€νΈλ₯Ό μμ±ν λ
VariableEnvironment
μ μ 보λ₯Ό λ¨Όμ λ΄μ λ€μ, μ΄λ₯Ό κ·Έλλ‘ λ³΅μ¬ν΄μLexicalEnvironment
λ₯Ό λ§λ€κ³ , μ΄νμλLexicalEnvironment