Hoisting
Javascriptμ νΈμ΄μ€ν
ν¨μ μμ μλ μ μΈλ€μ λͺ¨λ λμ΄μ¬λ €μ ν΄λΉ ν¨μ μ ν¨ λ²μμ μ΅μλ¨μ μ μΈνλ κ²μ λ§νλ€.
μλ°μ€ν¬λ¦½νΈ ν¨μλ μ€νλκΈ° μ μ ν¨μ μμ νμν λ³μ κ°λ€μ λͺ¨λ λͺ¨μμ μ ν¨ λ²μ(μ€μ½ν)μ μ΅μλ¨μ μ μΈνλ κ² μ²λΌ 보μΈλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€ννκΈ° μ μ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ€.
λν μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€ννκΈ° μ μ€ν 컨ν μ€νΈλ₯Ό μνκ³Όμ μμ λͺ¨λ μ μΈ(var, let, const, function, class)μ μ€μ½νμ λ±λ‘νλ€.
μ΄ λ μλ°μ€ν¬λ¦½νΈ Parserκ° ν¨μ μ€ν μ ν΄λΉ ν¨μλ₯Ό ν λ² μ κ²νλ©΄μ νμν κ°λ€μ λμ΄μ¬λ¦°λ€.
κ·Έλ λ€λ©΄ λ³μ μ μΈμ κ΅³μ΄ λ―Έλ¦¬ μν΄λ λλ κ²μΌκΉ?
κ·Έλ μ§λ μλ€. let/const/class λ₯Ό μ΄μ©ν μ μΈκ³Ό *ν¨μ ννμμμλ νΈμ΄μ€ν μ΄ λ°μνμ§ μλκ² μ²λΌ 보μΈλ€.
κ·Έλ¬λ λͺ¨λ μ μΈμ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ λ§λ€.
λ€λ§ let, const ν€μλλ‘ μ μΈλ λ³μλ μ€μ½νμ μμμμ λ³μμ μ μΈκΉμ§ μΌμμ μ¬κ°μ§λ(Temporal Dead Zone; TDZ)μ λΉ μ§κΈ° λλ¬Έμ΄λ€.
μ¬κΈ°μ μ€μν μ§μ μ μ΄ νΈμ΄μ€ν μ΄λΌλ μ©μ΄κ° βμ μΈμ΄ λ¨Όμ λ©λͺ¨λ¦¬μ μ μ₯λμλ€.βλ κ²μ μλ―ΈνκΈ° λλ¬Έμ(μ μΈμ΄ λμ΄μ¬λ €μ§λ€βλ μλ―Έμ΄κΈ° λλ¬Έμ)
λͺ¨λ μ μΈμ νΈμ΄μ€ν μ΄ μΌμ΄λλ€λ λ§μ μ°Έμ΄λλ€.
μ¦ νΈμ΄μ€ν μ΄ νμΌμ 맨 μλ‘ λμ΄μ¬λ €μ§λ νμμ μλ―Έν λ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°ν΄μ μλ¬λ₯Ό λ°μμν¨λ€κ³ νΈμ΄μ€ν μ΄ μΌμ΄λμ§ μμ κ²μ μλλΌλ μλ―Έμ΄λ€.
λκ° μ΄λ¬λ€ μ λ¬λ€ νλ κ² κ°μΌλ μ 리λ₯Ό ν΄λ³΄μ.
λ€μμ λͺ μ λ€μ λͺ¨λ μ°Έμ΄λ€.
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ μ μΈμλ νΈμ΄μ€ν μ΄ μΌμ΄λλ€.
letκ³Ό constλ μ΄κΈ°νλμ§ μμ μνλ‘ μ μΈλ§ λ©λͺ¨λ¦¬μ μ μ₯λλ€.
μ μΈμ λμ΄μ¬λ €μ§κ³ (μ μΈμ΄ μ½λ μ€ν μ μ λ©λͺ¨λ¦¬μ μ μ₯), κ°μ΄ μ΄κΈ°νκ° λμ§ μμ μ°Έμ‘°ν μ μμ΄ μλ¬κ° λ°μνλ€.
νΈμ΄μ€ν μ΄ μΌμ΄λμ§ μμμ μλ¬κ° λ°μνλ κ²μ΄ μλλΌ, νΈμ΄μ€ν μ΄ μΌμ΄λ¬κΈ° λλ¬Έμ μλ¬κ° λ°μνλ κ².
μμ μ½λλ foo λ³μμ μ μΈμ΄ νΈμ΄μ€ν λμ§ μμλ€λ©΄, μλ¬ μμ΄ λμν κ²μ΄λ€.
μ? μ€μ½ν 체μΈμμ νμ¬ μ€μ½νλΆν° μμ μ€μ½νλ‘ μ΄λνλ©΄μ fooλ₯Ό μ°Ύμ κ²μ΄κΈ° λλ¬Έμ΄λ€.
κ·Έλ¬λ νμ¬ μ€μ½νμ foo μ μΈλ¬Έμ΄ μ‘΄μ¬νκΈ° λλ¬Έμ, νΈμ΄μ€ν μ΄ λ°μνμΌλ κ°μ΄ μ΄κΈ°ν λμ§ μμ μλ¬κ° λ°μνλ€!
μλ°μ€ν¬λ¦½νΈ Parser λ΄λΆμ λμ λ°©μμ μ μΆν΄λ³΄μλ©΄ λ€μκ³Ό κ°μ κ²μ΄λ€.
ν¨μ μ μΈλ¬Έμμμ νΈμ΄μ€ν
ν¨μμ μΈλ¬Έμ μ½λλ₯Ό ꡬνν μμΉμ κ΄κ³μμ΄ μλ°μ€ν¬λ¦½νΈμ νΉμ§μΈ νΈμ΄μ€ν μ λ°λΌ λΈλΌμ°μ κ° μλ°μ€ν¬λ¦½νΈλ₯Ό ν΄μν λ 맨 μλ‘ λμ΄ μ¬λ €μ§λ€.
ν¨μ ννμμμμ νΈμ΄μ€ν
ν¨μννμμ ν¨μμ μΈλ¬Έκ³Ό λ¬λ¦¬ μ μΈκ³Ό νΈμΆ μμμ λ°λΌμ μ μμ μΌλ‘ ν¨μκ° μ€νλμ§ μμ μ μλ€.
ν¨μννμμμλ μ μΈκ³Ό ν λΉμ λΆλ¦¬κ° λ°μνλ€.
ν¨μ ννμμ μ μΈμ΄ νΈμΆλ³΄λ€ μμ μλ κ²½μ°
ν¨μ ννμμ μ μΈμ΄ νΈμΆλ³΄λ€ μλμ μλ κ²½μ° (var λ³μ ν λΉ)
ν¨μ ννμμ μ μΈμ΄ νΈμΆλ³΄λ€ μλμ μλ κ²½μ° (let/const λ³μ ν λΉ)
Last updated