π Hoisting
- Hoisting μ 무μμΈκ°?
JavaScript νΈμ΄μ€ν μ μΈν°ν리ν°κ° μ½λλ₯Ό μ€ννκΈ° μ μ ν¨μ, λ³μ, ν΄λμ€ λλ
μν¬νΈ(import)μμ μΈλ¬Έμ ν΄λΉ λ²μμ 맨 μλ‘ λμ΄μ¬λ¦¬λ κ²μ²λΌ 보μ΄λ νμμ λ»ν©λλ€.
- μΆμ² : MDN
- JavaScript μμ§μ΄ μ½λλ₯Ό μ€ννκΈ° μ μ λ³μμ ν¨μ μ μΈμ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ¦¬λ κ²μ²λΌ λμνλ νΉμ§μ΄λ€.
- μ€μ λ‘ μ½λμ μμΉκ° λ³κ²½λλ κ²μ μλλ©°, λ³μμ ν¨μ μ μΈμ΄ μ€ν 컨ν μ€νΈ μμ± λ¨κ³ μμ λ©λͺ¨λ¦¬μ λ±λ‘λλ€.
- λ³μλ μ μΈλ§ λμ΄μ¬λ €μ§λ©° μ΄κΈ°νλ λμ΄μ¬λ €μ§μ§ μλλ€.
- Hoisting κ³Όμ
- JavaScript λ μ½λλ₯Ό μ€ννκΈ° μ μ Execution Contextλ₯Ό μμ±νλ€.
- μ€ν 컨ν μ€νΈκ° μμ±λ λ, λ³μμ ν¨μ μ μΈμ΄ λ©λͺ¨λ¦¬μ λ¨Όμ λ±λ‘λλ€.
- μ΄λ₯Ό ν΅ν΄ μ μΈμ΄ μ½λμ μμμ κ΄κ³μμ΄ μ¬μ©ν μ μκ² λλ, μ΄κΈ°νλ μ μλ μ€μ μ½λκ° μ€νλ λ μ΄λ£¨μ΄μ§λ€.
βοΈ λ³μ
- λ³μ μ μΈκ³Ό μ΄κΈ°νμ Hoisting μ°¨μ΄
νΉμ§ | var | let | const |
νΈμ΄μ€ν μ¬λΆ | O (νΈμ΄μ€ν λ¨) | O (νΈμ΄μ€ν λ¨) | O (νΈμ΄μ€ν λ¨) |
μ΄κΈ°ν μμ | μ΄κΈ°νκ° λμμ μ΄λ£¨μ΄μ§ | μ΄κΈ°νλ μ€ν λ¨κ³μμ μ΄λ£¨μ΄μ§ | |
μ¬μ© κ°λ₯ μ¬λΆ (∗TDZ) | μ μΈ μ΄μ μλ undefinedλ‘ μ κ·Ό κ°λ₯ | μ μΈ μ μ μ κ·Όμ ReferenceError λ°μ | |
μ€μ½ν (Scope) | function scope | block sope | |
μ¬μ μΈ κ°λ₯ μ¬λΆ | κ°λ₯ | λΆκ°λ₯ | |
μ¬ν λΉ κ°λ₯ μ¬λΆ | κ°λ₯ | κ°λ₯ | λΆκ°λ₯ |
∗TDZ : Temporal Dead Zone
- μμ μ½λ
console.log(a); // undefined
var a = 10;
console.log(a); // 10
console.log(b); // ReferenceError
let b = 20;
console.log(c); // ReferenceError
const c = 30;
c = 40; // Assignment to constant variable.
π€ ν¨μ
- ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμ Hoisting μ°¨μ΄
- ν¨μ μ μΈλ¬Έ
- μ μΈκ³Ό μ μκ° λͺ¨λ νΈμ΄μ€ν λλ€.
- ν¨μ μ μΈ μ΄μ μλ νΈμΆν μ μλ€.
- ν¨μ ννμ
- λ³μ μ μΈλ§ νΈμ΄μ€ν λλ€.
- μ΄κΈ°νλ ν¨μλ νΈμ΄μ€ν λμ§ μκΈ°μ μ μΈ μ μ νΈμΆνλ©΄ μ€λ₯(TypeError)κ° λ°μνλ€.
- μμ μ½λ
// ν¨μ μ μΈλ¬Έ
sayHello(); // output: Hello
function sayHello() {
console.log("Hello");
}
// ν¨μ ννμ
greet(); // TypeError: greet is not a function
let greet = function () {
console.log("Hi");
}
π€ class
- class μμμ hoisting
- ν΄λμ€ μ μΈλ νΈμ΄μ€ν λμ§λ§, let, const μ λΉμ·νκ² TDZ μ μν΄ μ μΈ μ μ μ κ·Όνλ©΄ ReferenceError κ° λ°μνλ€.
const obj = new MyClass(); // ReferenceError
class MyClass {
constructor() {
this.name = "Nana";
}
}
π€ λ¬Έμ
- Hoisting μΌλ‘ λ°μν μ μλ λ¬Έμ
- λ³μ μ μΈμ΄ λμ΄μ¬λ €μ§λ κ²μ²λΌ λμνκΈ° λλ¬Έμ μ½λ κ°λ μ±μ΄ λ¨μ΄μ§ μ μλ€.
- undefined κ°μ μ°Έμ‘°νλ λ²κ·Έκ° λ°μν μ μλ€.
- Hoisting λμ λ°©μ νΌνλ λ°©λ²
- let, const λ₯Ό μ¬μ©νμ¬ TDZ λ₯Ό νμ©νλ©΄ μ μΈ μ μ κ·Ό μ μλ¬κ° λ°μνμ¬ λ°©μ§ ν μ μλ€.
- λ³μμ ν¨μμ μΈμ μ½λμ μ΅μλ¨μ λͺ νν μμ±νλ€.
- ES6 μ λͺ¨λ μμ€ν νμ©μ μ€μ½νμ μ μΈλ¬Έμ κ° ν΄κ²°λλ€.
π₯ λ°°μ΄μ
νΈμ΄μ€ν μ μ€ν컨ν μ€νΈκ° μμ±λ λ λ³μμ ν¨μ μ μΈμ΄ λ©λͺ¨λ¦¬μ λ¨Όμ λ±λ‘λλ©΄μ λ°μνλλ° κΈ°μ‘΄μ μ¬μ©νλ var νΉμ±μ μ΄κΈ°ν μ μ νΈμΆνλ©΄ undefined λ₯Ό μΆλ ₯νλλ° μ΄λ μλμΉ μμ κ°μ΄κΈ° λλ¬Έμ λ¬Έμ λ₯Ό μΌκΈ°ν μ μλ€. μ΄κ²μ ν΄κ²°νκΈ° μν λ체μ λ‘ let κ³Ό const κ° μλλ° μ΄λν νΈμ΄μ€ν μ΄ μ΄λ£¨μ΄μ§μ§λ§ TDZ λ‘ μλ¬λ₯Ό λ°μμμΌ λ§μΉ νΈμ΄μ€ν μ΄ μ΄λ£¨μ΄μ§μ§ μμ κ² μ²λΌ 보μ΄κ² νλ€. μ¬κΈ°μ μ€μ μ μ κ·Όλ³Έμ μΌλ‘ let κ³Ό const λ νΈμ΄μ€ν μ΄ μ΄λ£¨μ΄μ§λ€λ μ μ΄λ€.
μν©μ λ°λΌ νΈμ΄μ€ν μ΄ μ΄λ£¨μ΄μ§λ κ²μ΄ μ½λμ μ μ°μ±μ μ 곡νκ³ μ΄κΈ°ν μμμμ μμ λ‘μ°λ©° νλ‘ν νμ΄ν νκΈ° μ’κ³ κΈ°μ‘΄ λ κ±°μ μ½λμμ νΈνμ±λ μ’μ μ₯μ μ΄ μμ§λ§, μμμΉ λͺ»ν λμμ νλ‘κ·Έλλ°μμ μ μ¬μ μ€λ₯λ₯Ό μΌκΈ°ν μ μκ³ μ€λ₯λ₯Ό μΆμ νκΈ° μ΄λ €μ λλ²κΉ νκΈ° μ΄λ €μμ§κ³ μ½λμ κ°λ μ± λν μ νμν€κΈ° λλ¬Έμ νΈμ΄μ€ν μ λ°©μ§νλ λ°©μμ μ±ννμ¬ κ°λ μ±κ³Ό μμ μ±μ λμ΄λ κ²μ΄ μ’κ² λ€.
νμ΅μ€μΈ λ΄μ©μΌλ‘ μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ κΌ κ³ μΉλλ‘ νκ² μ΅λλ€.
μ°Έκ³
https://developer.mozilla.org/ko/docs/Glossary/Hoisting
νΈμ΄μ€ν - MDN Web Docs μ©μ΄ μ¬μ : μΉ μ©μ΄ μ μ | MDN
JavaScript νΈμ΄μ€ν μ μΈν°ν리ν°κ° μ½λλ₯Ό μ€ννκΈ° μ μ ν¨μ, λ³μ, ν΄λμ€ λλ μν¬νΈ(import)μ μ μΈλ¬Έμ ν΄λΉ λ²μμ 맨 μλ‘ λμ΄μ¬λ¦¬λ κ²μ²λΌ 보μ΄λ νμμ λ»ν©λλ€.
developer.mozilla.org
'frontEnd > javaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
console.log("JavaScript μ±κΈ μ€λ λ"); (2) | 2024.09.03 |
---|---|
console.log("Object.is μ μΌμΉ === μ°μ°"); (0) | 2024.07.29 |
[μ½λ¦°μ΄μ 곡λΆ] flatMap vs filter,map (μ§μ νμ) (2) | 2023.11.30 |