[23μ₯] μλ°μ€ν¬λ¦½νΈ λ₯λ€μ΄λΈ_μ€ν 컨ν μ€νΈ
π μμ€μ½λλ₯Ό μ€ννλλ° νμν νκ²½μ μ 곡νκ³ μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμ
μλ³μ(λ³μ, ν¨μ, ν΄λμ€)λ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½νμ, μ½λ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ΄λΆ λ©μ»€λμ¦
→ λͺ¨λ μ½λλ μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μ€νλκ³ κ΄λ¦¬λλ€.
- μλ³μμ μ€μ½νλ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½ μΌλ‘ κ΄λ¦¬
- μ½λμ€ν μμλ μ€ν 컨ν μ€νΈ μ€νμΌλ‘ κ΄λ¦¬
μ€ν 컨ν μ€νΈμ ꡬ쑰_
variable Environment (Environment Record, Outer Lexical Environment Reference)μμ μ μΈλΆ νκ²½μ λν μ°Έμ‘°λ₯Ό κ°κ³ μκ³ , νΈμ΄μ€ν λ λ³μ λ€μ μ λ³΄κ° ν¬ν¨μ μΈλ λ³μλ€μ ν¬ν¨ν νκ²½μ λνλ΄λ κ°μ²΄.
lexical Environment (Environment Record, Outer Lexical Environment Reference)λ³μ, ν¨μ λ±μ μ 보λ₯Ό λ΄μ νκ²½μ λνλ΄λ κ°μ²΄. μμ μ μΈλΆ νκ²½μ λν μ°Έμ‘°λ₯Ό κ°κ³ μκ³ , μ€μ½ν μ²΄μΈ μ λ³΄κ° ν¬ν¨
this binding → this ν€μλκ° λ°μΈλ© λλ κ°μ²΄. νΈμΆ λ°©μμ λ°λΌ κ²°μ
- μ€ν 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈ μ½λμ νκ° κ³Όμ μ€μ μμ±
- μ½λ μ€ν μ , jsμμ§μ μ½λλ₯Ό ν΄μνκ³ μ€ν κ°λ₯ν ννλ‘ λ³ννλ νκ° κ³Όμ μ κ±°μΉλλ°,
- μ΄ κ³Όμ μμ μ€ν 컨ν μ€νΈκ° μμ±
Environment Record ; νκ²½ λ μ½λ
- μ€μ½νμ ν¬ν¨λ μλ³μλ₯Ό λ±λ‘νκ³ λ±λ‘λ μλ³μμ λ°μΈλ© λ κ°μ κ΄λ¦¬νλ μ μ₯μ
- νκ²½ λ μ½λλ μμ€μ½λμ νμ μ λ°λΌ κ΄λ¦¬νλ λ΄μ©μ μ°¨μ΄κ° μλ€.
Outer Lexical Environment Reference ; μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°
- μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€.μ΄ κ²μ ν΅ν΄ λ¨λ°ν₯ λ§ν¬λ 리μ€νΈμΈ μ€μ½ν 체μΈμ ꡬννλ€.
- ν΄λΉ μ€ν 컨ν μ€νΈλ₯Ό μμ±ν μμ€μ½λλ₯Ό ν¬ν¨νλ μμ μ½λμ λ μ컬 νκ²½μ λ§νλ€.
μ€ν 컨ν μ€νΈ μ€ν
const x = 1;
function foo () {
const y = 2;
function bar () {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo(); // 6
→
μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬νλ€.
μμ€μ½λκ° νκ°λλ©΄ μ€ν 컨ν μ€νΈκ° μμ±λκ³ , μ€νμ μ΅μμμ μμΈλ€.
μ΅μμμ μ‘΄μ¬νλ μ€ν 컨ν μ€νΈ(μ€ν μ€μΈ μ€ν 컨ν μ€νΈ_running execution context)λ
μΈμ λ νμ¬ μ€ν μ€μΈ μ½λμ μ€ν 컨ν μ€νΈλ€.
μ€ν 컨ν μ€νΈμ κ³Όμ
var x = 1;
const y = 2;
function foo(a){
var x = 3;
const y = 4;
function bar(b){
const z = 5;
console.log(a + b + x + y +z);
}
bar(10);
}
foo(20);
π 1.μ μ κ°μ²΄ μμ± → 2.μ μμ½λ νκ° → 3. μ μ μ½λ μ€ν →4.foo ν¨μ μ½λ νκ° → 5. foo ν¨μ μ½λ μ€ν → 6. bar ν¨μ μ½λ νκ° → 7. bar ν¨μ μ½λ μ€ν → 8. barν¨μμ½λ μ€ν μ’ λ£ → 9. fooν¨μ μ½λ μ€ν μ’ λ£ → 10. μ μ μ½λ μ€ν μ’ λ£
π λ μ컬 μ€μ½ν(μ μ μ€μ½ν)_ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλλΌ, μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ → ν¨μ κ°μ²΄λ μμ μ΄ μ μλ μ€μ½ν, μ¦ μμ μ€μ½νλ₯Ό κΈ°μ΅νλ€.