μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ³μμ ν¨μμ λ©λͺ¨λ¦¬ 곡κ°μ μ μΈ μ μ 미리 ν λΉνλ κ²μ μλ―Έν©λλ€.
μ¦, μ½λκ° μ€ννκΈ° μ λ³μμ μΈ/ν¨μμ μΈ μ΄ ν΄λΉ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄ μ¬λ €μ§λ κ²κ°μ νμμ λ§ν©λλ€.
- νΈμ΄μ€ν μ μ€μ½λ λ¨μλ‘ λ°μ ν©λλ€.
environmentRecord κ³Ό hoistingμ μ°κ΄
- environmentRecord λ μ€ν 컨ν μ€νΈ κ°μ²΄λ νμ±νλλ μμ μ VariableEnvironment, LexicalEnviornment νκ²½μ μν©λλ€.
- environmentRecord λ λ³μλͺ λ§ λμ΄μ¬λ¦¬κ³ ν λΉ κ³Όμ μ κ·Έλλ‘ λ¨κ²¨λκ² λ©λλ€.
- environmentRecord λ νμ¬ μ»¨ν
μ€νΈμ κ΄λ ¨λ μ½λμ μλ³μ μ 보λ€μ΄ μ μ₯ λ©λλ€.
- 맀κ°λ³μ μλ³μ
- ν¨μ μ체
- ν¨μ λ΄λΆμ μλ³μ
hoisting κ³Ό var, let, const
// νΈμ΄μ€ν
λλ¬Έμ μ μΈμ΄ λμ΄μ¬λ €μ Έμ μ€λ₯ μλ¨.
console.log(text); // (μ μΈ + μ΄κΈ°ν λ μν)
text = 'Hanamon!'; // (μ μΈ + μ΄κΈ°ν + ν λΉ λ μν)
var text;
console.log(text);
// νΈμ΄μ€ν
λλ¬Έμ μ μΈμ΄ λμ΄μ¬λ €μ‘μ§λ§ μ΄κΈ°ν μλ μνμμ μ°Έμ‘°ν΄μ μ€λ₯ λ¨.
console.log(text); // (μ μΈ λ μν, μ΄κΈ°ν(λ©λͺ¨λ¦¬ κ³΅κ° ν보μ undefinedλ‘ μ΄κΈ°ν) μλμ μ°Έμ‘° λΆκ°λ₯ -> μλ¬λ¨)
let text; // μ¬κΈ°μ μ΄κΈ°ν λ¨κ³κ° μ€νλ¨
const text; // μλ¬λ¨. μ£Όμ! μ μ΄μ const ν€μλλ‘ μ¬ν λΉ λΆκ°λ₯! κ·Έλμ μ μΈκ³Ό λμμ ν λΉν΄μΌν¨
- varλ μ μΈνκΈ° μ μ μ¬μ©ν μ μμ΅λλ€.
- let, const λͺ¨λ νΈμ΄μ€ν μ΄ μΌμ΄λ©λλ€. -> νμ§λ§ μ΄ λμ TDZ(Temporal Dead Zone)μ μν₯μ λ°μ΅λλ€.
- TDZ μμμ μλ λ³μλ€μ μ¬μ©ν μ μμ΅λλ€. -> ν λΉμ νκΈ° μ μλ μ¬μ©ν μ μμ΅λλ€.
// μ μμ μΈ μ½λ
let age = 30;
function showAge(){
console.log(age);
}
showAge();
// λ¬Έμ κ° λ°μνλ μ½λ
let age = 30;
function showAge(){
console.log(age); // TDZ ꡬμ : μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§μ ꡬκ°
let age = 20;
}
showAge();
λ³μμ μμ±κ³Όμ κ³Ό μ°κ΄ ?
var
- μ μΈ λ° μ΄κΈ°ν λ¨κ³
- ν λΉ λ¨κ³
- var ν€μλλ‘ μ μΈν λ³μλ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° νλ²μ μ΄λ£¨μ΄μ§λλ€.
- μ¦, λ³μλ₯Ό λ±λ‘(μ μΈ λ¨κ³)νκ³ λ©λͺ¨λ¦¬μ λ³μλ₯Ό μν 곡κ°μ ν보ν ν, undefinedλ‘ μ΄κΈ°ν ν©λλ€.
- λ°λΌμ λ³μ μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όνμ¬λ μ€μ½νμ λ³μκ° μ‘΄μ¬νκΈ° λλ¬Έμ μλ¬κ° λ°μνμ§ μμ΅λλ€.
let
- μ μΈ λ¨κ³
- μ΄κΈ°ν λ¨κ³
- ν λΉ λ¨κ³
- let ν€μλλ‘ μ μΈλ λ³μλ μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³κ° λΆλ¦¬λμ΄ μ§ν λ©λλ€.
- λ³μλ₯Ό λ±λ‘(μ μΈ λ¨κ³)νμ§λ§ μ΄κΈ°ν λ¨κ³λ λ³μ μ μΈλ¬Έμ λλ¬νμ λ(μ½λ μ€ν ν) μ΄λ£¨μ΄μ§λλ€.
- μ΄κΈ°ν μ΄μ μ λ³μμ μ κ·Όνλ €κ³ νλ©΄ μ°Έμ‘° μλ¬κ° λ°μ ν©λλ€. -> μ΄λ μμ§ λ³μκ° μ΄κΈ°νλμ§ μμκΈ° λλ¬Έμ΄λ€.
- μ¦, λ³μλ₯Ό μν λ©λͺ¨λ¦¬ 곡κ°μ΄ μμ§ ν보λμ§ μμκΈ° λλ¬Έμ λλ€.
- λ°λΌμ μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§λ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
- μ€μ½νμ μμ μ§μ λΆν° μ΄κΈ°ν μμ μ§μ κΉμ§μ ꡬκ°μ ‘μΌμμ μ¬κ°μ§λ(Temporal Dead Zone; TDZ)’λΌκ³ λΆλ¦ λλ€.
ν¨μ(function) λν νΈμ΄μ€ν μ΄ μΌμ΄λλ€.
foo1(); // ν¨μ μ μΈλ¬Έμμλ νΈμ΄μ€ν
μΌμ΄λλ€.
foo2(); // ν¨μ ννμμ΄λΌμ νΈμ΄μ€ν
μλλ€.
function foo1() {
console.log('Hello');
}
var foo2 = function() {
console.log('world');
}
< JavaScriptμ letκ³Ό const, κ·Έλ¦¬κ³ TDZ βοΈ >
νΈμ΄μ€ν
μ varλ§ κ°λ₯νλ€, νΈμ΄μ€ν
μ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ Έ λ³μλ₯Ό μ°Έμ‘° κ°λ₯νλ€λΌκ³ μκ³ μμμ΅λλ€. νμ§λ§ νΈμ΄μ€ν
μ let, const λ ν΄λΉλ©λλ€. μλ°μ€ν¬λ¦½νΈ μμ§μ μ½λλ₯Ό μ€ννκΈ° μ μ μ½λ μ€νμ νμν λͺ¨λ μ 보λ€μ μμ§νλ λ¨κ³, μ¦ μ€ν컨ν
μ€νΈλ₯Ό μμ±νλ λ¨κ³λ₯Ό μ§νν©λλ€. μμ§νλ μ 보 μ€ νλκ° λ³μ κ°μ²΄κ³ μ΄ λ³μ κ°μ²΄μ μ€μ½νμ μ μΈλ λ³μλ€μ λ΄μλ‘λλ€. μ¬κΈ°μ 'λ³μ μ μΈ'μ μλ―Έκ° λΆλͺ
νκ² λ€μ΄λ©λλ€. λ³μ μ μΈμ 'const, let, var ν€μλμ λ³μλ₯Ό μμ±ν κ²' μ²λΌ λ¨μν μλ―Έκ° μλλΌ λ³μ κ°μ²΄μ λ΄λλ€λ μλ―Έμ
λλ€. μ΄ κ³Όμ μ΄ νΈμ΄μ€ν
μ
λλ€.
κ·Έλ¬λ©΄ μ const, letμ μ€μ½νμμμ μ μΈλΆ μ½λ μ΄μ μ μ κ·Όνλ©΄ reference errorλ₯Ό λ΄κ³ varλ κ·Έλ μ§ μμκΉμ? μ£Όμν μ μ μ μΈμ΄ 곧 λ©λͺ¨λ¦¬ μ£Όμκ° μκ²Όλ€λ μλ―Έκ° μλλΌλ μ μ
λλ€. 'λ³μ μ΄κΈ°ν'μμ λ©λͺ¨λ¦¬ μ£Όμκ° μκΉλλ€. varλ νΈμ΄μ€ν
ν 곧λ°λ‘ undefined κ°μΌλ‘ μ΄κΈ°νλμ§λ§ letκ³Ό constλ κ·Έλ μ§ μμ΅λλ€. κ·Έλμ varλ λ©λͺ¨λ¦¬ μ£Όμκ° μμΌλ μ μΈλΆ μ½λ μ μ μ κ·Όμ΄ κ°λ₯νκ³ let, constλ λ©λͺ¨λ¦¬ μ£Όμκ° μμ΄μ reference errorκ° λλ κ²λλ€.
TDZ(Temporal Dead Zone)λ λ³μκ° μ μΈλ μ€μ½ν λ΄μμ μ μΈλΆ μ½λμ λΏκΈ° μ κΉμ§μ μ½λ λΌμΈλ€λ‘, μ¬κΈ°μ λ³μλ₯Ό μ°Έμ‘°ν λ μλ¬κ° λ°μνλ κ°λ
μ μΈ κ³΅κ°μ
λλ€. μμ μ€λͺ
ν κ²κ³Ό μ°κ΄μ§μΌλ©΄ letκ³Ό constλ νΈμ΄μ€ν
λμ§λ§ μ΄κΈ°νκ° μ΄λ€μ§μ§ μμ TDZμ μν₯μ λ°λλ€λ‘ κ²°λ‘ μ μ§μ μ μμ΅λλ€.
μ°Έκ³
'π Front-End > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Callback Function (0) | 2022.11.16 |
---|---|
ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ μ°¨μ΄μ (0) | 2022.11.16 |
μ€ν 컨ν μ€νΈ(Execution Context) (0) | 2022.11.16 |
λ³μ μ μΈ, μ΄κΈ°ν, ν λΉ (0) | 2022.11.16 |
var, let, const (0) | 2022.11.16 |