<star />
νΈμ΄μ€ν (hoisting) λ³Έλ¬Έ
1. λ³μ νΈμ΄μ€ν
console.log(foo); // ReferenceError : foo is not defined
let foo;
let ν€μλλ‘ μ μΈν λ³μλ₯Ό λ³μ μ μΈλ¬Έ μ΄μ μ μ°Έμ‘°νλ©΄ μ°Έμ‘° μλ¬ (ReferenceError) κ° λ°μν¨.
console.log(z); // undefined
var z;
var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ "μ μΈ λ¨κ³" μ "μ΄κΈ°ν λ¨κ³" κ° νλ²μ μ§νλ¨.
μ μΈ λ¨κ³μμ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½, μ¦ μ€μ½νμ λ³μ μλ³μλ₯Ό λ±λ‘νμ¬ μλ°μ€ν¬λ¦½νΈ μμ§μ λ³μμ μ‘΄μ¬λ₯Ό μλ¦Ό ππ»
κ·Έλ¦¬κ³ μ¦μ μ΄κΈ°ν λ¨κ³μμ undefined λ‘ λ³μλ₯Ό μ΄κΈ°νν¨. ππ» λ³μ μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όν΄λ μ€μ½νμ λ³μκ° μ‘΄μ¬νκΈ° λμ μλ¬κ° λ°μ μ ν¨. ππ» λ€λ§ undefined λ₯Ό λ°νν¨! μ΄ν, λ³μ ν λΉλ¬Έμ λλ¬νλ©΄ λΉλ‘μ κ°μ΄ ν λΉλ κ².
// var ν€μλλ‘ μ μΈν λ³μλ λ°νμ μ΄μ μ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° μ€νλ¨
// λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
foo = 1; // ν λΉλ¬Έμμ ν λΉ λ¨κ³κ° μ€νλ¨
console.log(foo); // 1
let ν€μλλ‘ μ μΈν λ³μλ "μ μΈ λ¨κ³" μ "μ΄κΈ°ν λ¨κ³" κ° λΆλ¦¬λμ΄ μ§νλ¨.
μ¦, λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ μ μΈ λ¨κ³κ° λ¨Όμ μ€νλμ§λ§ μ΄κΈ°ν λ¨κ³λ λ³μ μ μΈλ¬Έμ λλ¬νμ λ μ€νλ¨. let ν€μλλ‘ μ μΈν λ³μλ μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν λ¨κ³ μμ μ§μ (λ³μ μ μΈλ¬Έ)κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§ λ³μλ₯Ό μ°Έμ‘°ν μ μλ ꡬκ°μ μΌμμ μ¬κ°μ§λ (Temporal Dead Zone: TDZ) λΌκ³ λΆλ¦.
πΊ let ν€μλλ‘ μ μΈν λ³μλ λ³μ νΈμ΄μ€ν μ΄ λ°μνμ§ μλμ?
-> λ. νΈμ΄μ€ν λ°μν©λλ€.
let foo = 1; // μ μλ³μ
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // μ§μλ³μ
}
μ μ½λμ²λΌ let ν€μλλ‘ μ μΈν λ³μλ μ¬μ ν νΈμ΄μ€ν μ΄ λ°μνκΈ° λλ¬Έμ μ°Έμ‘° μλ¬ (Reference Error) κ° λ°μν¨.
μλ°μ€ν¬λ¦½νΈλ ES6 μμ λμ λ let, const λ₯Ό ν¬ν¨ν΄μ λͺ¨λ μ μΈ (var, let, const, function, function*, class λ±) μ νΈμ΄μ€ν ν¨.
λ¨, ES6 μμ λμ λ let, const, class λ₯Ό μ¬μ©ν μ μΈλ¬Έμ νΈμ΄μ€ν μ΄ λ°μνμ§ μλ κ²μ²λΌ λμν¨.
!...κ²°λ‘ ...!
λ³μ μ μΈ 3λ¨κ³ : μ μΈ -> μ΄κΈ°ν -> ν λΉ
νΈμ΄μ€ν μ λ³μλ₯Ό μ μΈνκ³ μ΄κΈ°ν νμ λ, μ μΈ λ¨κ³κ° μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ§λ νμμ λ§ν¨.
varμ κ²½μ° λ³μλ₯Ό μ μΈνκ³ μ΄κΈ°ν νλ κ³Όμ μ΄ λμμ μΌμ΄λμ νΈμ΄μ€ν μ΄ λ°μν¨!
λ°λ©΄, let/const μ κ²½μ° μ μΈκ³Ό μ΄κΈ°ν λ¨κ³κ° λμμ μΌμ΄λμ§ μλλ€.
μ€ν μμ μμ μ€μ μ μΈ λ¨κ³λ₯Ό λ§λ λ μ΄κΈ°νκ° μ΄λ€μ§.
κ·Έ μ¬μ΄μ μκ°μ μΌμμ μ¬κ°μ§λ (Temporal Dead Zone: TDZ) μ΄λΌκ³ νλ€.
μ¦, μ€ν 컨ν μ€νΈμ λ³μκ° μ μΈμ λμμΌλ λ©λͺ¨λ¦¬κ° ν λΉλμ§ μμ μ°Έμ‘° μλ¬ (Reference Error) κ° λ°μνλ€.
ν¨μ νΈμ΄μ€ν μ μ μΈλ¬Έμμ λ°μνλ€.
μ μΈλ ν¨μλ μλ¨μμ μ°Έμ‘°, νΈμΆμ΄ κ°λ₯νλ€.
ν¨μ ννμμ κ²°κ΅ λ³μμ ν λΉνλ λͺ¨μ΅μ΄λΌ λ³μ νΈμ΄μ€ν μ μ¬λ‘λ‘ λ³Ό μ μλ€.
'JavaScript π' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
null κ³Ό undefined μ μ°¨μ΄μ (0) | 2022.12.21 |
---|---|
μ΄λ²€νΈ 루νμ νμ€ν¬ ν (0) | 2022.12.18 |
λκΈ°/λΉλκΈ° (0) | 2022.12.10 |
ν΄λ‘μ (Closure) (0) | 2022.12.08 |
Truthyμ Falsy (0) | 2022.11.30 |