πΈ13μ₯. μ€μ½ν
β
13.1 μ€μ½νλ?
λͺ¨λ μλ³μ(λ³μ μ΄λ¦, ν¨μ μ΄λ¦, ν΄λμ€ μ΄λ¦ λ±)
λ μμ μ΄ μ μΈλ μμΉμ μν΄ λ€λ₯Έ μ½λκ° μλ³μ μμ μ μ°Έμ‘°ν μ μλ μ ν¨ λ²μκ° κ²°μ λλ€.
μλ³μ κ²°μ (identifier resolution)
μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€νν λ
μ½λμ λ¬Έλ§₯(context)
μ κ³ λ €νλ€.μ½λκ° μ΄λμμ μ€νλκ³ μ£Όλ³μ μ΄λ€ μ½λκ° μλμ§(λ μ컬 νκ²½)μ λ°λΌ λμΌν μ½λ(1κ³Ό 2)λ λ€λ₯Έ κ²°κ³Όλ₯Ό λ§λ λ€.
μ€μ½νλ λ€μμ€νμ΄μ€λ€.
μλ³μλ μ΄λ€ κ°μ ꡬλ³ν μ μμ΄μΌνλ―λ‘
μ μΌ
ν΄μΌνλ€. β μλ³μμΈ λ³μ μ΄λ¦μ μ€λ³΅λ μ μλ€. β νλμ κ°μ μ μΌν μλ³μμ μ°κ²°(name binding)λμ΄μΌ νλ€.
β
13.2 μ€μ½νμ μ’
λ₯
μ μ
μ½λμ κ°μ₯ λ°κΉ₯ μμ
μ μ μ€μ½ν
μ μ λ³μ
μ§μ
ν¨μ λͺΈμ²΄ λ΄λΆ
μ§μ μ€μ½ν
μ§μ λ³μ
μ μλ³μλ μ΄λμλ μ§ μ°Έμ‘°ν μ μλ€.
μ§μλ³μλ μμ μ μ§μ μ€μ½νμ νμ μ§μ μ€μ½νμμ μ°Έμ‘°ν μ μλ€.
β
13.3 μ€μ½ν 체μΈ
λ³μλ₯Ό μ°Έμ‘°ν λ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€μ½ν 체μΈμ ν΅ν΄ λ³μλ₯Ό μ°Έμ‘°νλ μ½λμ μ€μ½νμμ μμνμ¬ μμ μ€μ½ν λ°©ν₯μΌλ‘ μ΄λνλ©°
μ μΈλ λ³μλ₯Ό κ²μ(identifier resoluton)
νλ€.
μ§μ : outer ν¨μ & innter ν¨μ
innerν¨μλ outer ν¨μμ μ€μ²©ν¨μ
outer ν¨μκ° λ§λ μ§μ μ€μ½νλ inner ν¨μκ° λ§λ μ§μ μ€μ½νμ μμμ€μ½νμ΄κ³
outer ν¨μμ μ§μ μ€μ½νμ μμμ€μ½νλ μ μ μ€μ½νλ€.
@μΈλΆ ν¨μ(outer function)
: μ€μ²© ν¨μλ₯Ό ν¬ν¨νλ ν¨μ
@μ€μ²© ν¨μ(nested function)
: ν¨μ λͺΈμ²΄ λ΄λΆμμ ν¨μκ° μ μλ κ²
μ€μ½ν 체μΈμ μν λ³μ κ²μ
λ³μλ₯Ό μ°Έμ‘°νλ μ€μ½νμμ κ²μ β μ‘΄μ¬νμ§ μμΌλ©΄ μμμ€μ½νλ‘ μ΄λ ν κ²μ
(4) x λ³μλ₯Ό μ°Έμ‘°νλ μ€μ½νμΈ inner ν¨μμ μ§μ μ€μ½νμμ x λ³μ κ²μ β μ‘΄μ¬ O : κ²μλ λ³μ μ°Έμ‘° ν μ’ λ£
(5) y λ³μλ₯Ό μ°Έμ‘°νλ μ€μ½νμΈ inner ν¨μμ μ§μ μ€μ½νμμ y λ³μ κ²μ β μ‘΄μ¬ X β μμ μ€μ½νμΈ outer ν¨μμ μ§μ μ€μ½νλ‘ μ΄λ β outerμλ μ‘΄μ¬ X β μμ μ€μ½νμΈ μ μ μ€μ½νλ‘ μ΄λ β μ‘΄μ¬ O : κ²μλ λ³μ μ°Έμ‘° ν μ’ λ£
μ€μ½ν 체μΈμ μν ν¨μ κ²μ
λ°λΌμ, μ μ½λμμ (1)μμ foo ν¨μλ₯Ό νΈμΆνλ©΄
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μλ₯Ό νΈμΆνκΈ° μν΄ ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μ fooλ₯Ό κ²μνλ€.
β
13.4 ν¨μ λ 벨 μ€μ½ν
λΈλ‘ λ 벨 μ€μ½ν(block level scope)
ν¨μ λͺΈμ²΄λ§μ΄ μλλΌ
λͺ¨λ μ½λ λΈλ‘
(if, for, while, try/catch λ±)μ΄ μ§μ μ€μ½νμ λ§λ λ€.
ν¨μ λ 벨 μ€μ½ν(function level scope)
var ν€μλλ‘ μ μΈλ λ³μ
λ μ€λ‘μ§ν¨μμ μ½λ λΈλ‘
(ν¨μ λͺΈμ²΄)λ§μ μ§μμ€μ½νλ‘ μΈμ νλ€.λ°λΌμ, ν¨μ λ°μμ var ν€μλλ‘ μ μΈλ λ³μλ μ½λ λΈλ‘ λ΄μμ μ μΈλμλ€ ν μ§λΌλ λͺ¨λ μ μ λ³μλ€.
β
13.5 λ μ컬 μ€μ½ν
ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ λ°©μ
ν¨μλ₯Ό μ΄λμ νΈμΆ
νλ μ§μ λ°λΌ κ²°μ β λμ μ€μ½ν(dynamic scope)ν¨μλ₯Ό μ΄λμ μ μ
νλ μ§μ λ°λΌ κ²°μ β μ μ μ€μ½ν(static scope) / λ μ컬 μ€μ½ν(lexical scope)
μλ°μ€ν¬λ¦½νΈλ λ μ컬 μ€μ½νλ₯Ό λ°λ₯Έλ€.
λ°λΌμ, ν¨μκ° νΈμΆλ μμΉλ μμ μ€μ½ν κ²°μ μ μ΄λ ν μν₯λ μ£Όμ§ μλλ€.
ν¨μμ μμ μ€μ½νλ μΈμ λ μμ μ μ μλ μ€μ½νλ€.
ν¨μμ μμμ€μ½νλ ν¨μ μ μκ° μ€νλ λ μ μ μΌλ‘ κ²°μ λλ€.
Last updated