π¦ 컨ν μ€νΈ
컨ν μ€νΈ(Context)λ μν©, λ§₯λ½, λ¬Έλ§₯ μμ μλ―Έλ₯Ό μλ―Έν©λλ€. μ΄λ₯Ό κ°λ°μλ΅κ² ν΄μν΄λ³΄λ©΄, ν μ€νΈμ λ΄μ©λΏλ§ μλλΌ, ν μ€νΈκ° μ¬μ©λ μν©, μ΄μ λ¬Έλ§₯, μ΄ν λ§₯λ½ λ±μ λͺ¨λ κ°μ§κ³ μλ λ°μ΄ν° λ¬Άμμ κ°λ¦¬ν¨λ€κ³ ν μ μμ΅λλ€.

π JavaScriptμ λμ κ³Όμ
JavaScriptλ₯Ό μ¬μ©νκΈ° μν΄μλ μ½λλ₯Ό ν΅ν΄ λͺ λ Ήμ΄λ₯Ό λμ΄νλ©°, μ΄λ₯Ό νμ©νμ¬ λ‘μ§μ μνν μ μμ΅λλ€. μ΄λ μ½λλ₯Ό μμ±νλ νμλ₯Ό μ°λ¦¬κ° νν μλ μ½λ©(coding)μ΄λΌκ³ ν©λλ€.
π μμ€μ½λ
JavaScript λΏλ§ μλλΌ μ¬λ¬ κ°λ° μΈμ΄μμ μμ±λ μ½λλ₯Ό μμ€μ½λλΌκ³ λΆλ¦ λλ€. JavaScriptκ° λμν λ ν¬κ² μμ€μ½λ νκ°κ³Ό μμ€μ½λ μ€ν λ¨κ³λ‘ λλμ΄ λμνλ©°, μ΄ 4κ°μ§μ μμ€μ½λ νμ μ κ°μ§κ³ μμ€μ½λ νμ μ λ°νμΌλ‘ 컨ν μ€νΈλ₯Ό λ§λλλ€. μ¬κΈ°μ λ§λ€μ΄μ§ 컨ν μ€νΈλ₯Ό λμ(μ€ν)μ μν 컨ν μ€νΈ, μ¦ μ€ν 컨ν μ€νΈλΌκ³ λΆλ¦ λλ€.

π μμ€μ½λ νκ°
μμ€μ½λ νκ° λ¨κ³μμλ μ€ν 컨ν μ€νΈλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μμ±νκ³ , μμ±λμ΄ μλ λ³μ, ν¨μ λ±μ μ μΈλ¬Έμ νμ νμ¬ μ΄λ¦(μλ³μ)μ νλ‘νΌν° ν€λ‘, μ μΈλ λ΄μ©μ κ°μΌλ‘ νλ‘νΌν° κ°μΌλ‘ μ€ν 컨ν μ€νΈ κ°μ²΄μ νλ‘νΌν°λ‘ λ±λ‘ν©λλ€.

π© μμ€μ½λ μ€ν
μμ€μ½λ νκ° λ¨κ³κ° λλλ©΄ μμ€μ½λ μ€ν λ¨κ³κ° μμλ©λλ€.
μμ€μ½λ μ€ν λ¨κ³μμλ μμ€μ½λ νκ° μ΄ν λ΄μ©μ μ§ννλ©°, μ£Όλ‘ ν λΉ, νΈμΆ λ±μ λ΄μ©μ΄ μνλ©λλ€.

π μ€ν 컨ν μ€νΈ μμ±κ³Όμ νλμ 보기
JavaScriptλ μμ€μ½λ νκ° λ¨κ³μμ μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ , μ μΈλ¬Έμ ν΄λΉνλ μλ³μλ₯Ό ν€λ‘ λ±λ‘ν©λλ€. μ΄ν μμ€μ½λ μ€ν λ¨κ³μμ λ±λ‘λ ν€μ λ§λ κ°μ ν λΉν©λλ€.

π μμ€μ½λ νμ
4κ°μ§ μμ€μ½λ νμ μ μμ€μ½λ νκ°μ μν΄ κ°κ° μ μ μ€ν 컨ν μ€νΈ, ν¨μ μ€ν 컨ν μ€νΈ, eval μ€ν 컨ν μ€νΈ, λͺ¨λ μ€ν 컨ν μ€νΈκ° μμ±λ©λλ€.
| μμ€μ½λ νμ | μ€λͺ | μμ±νλ μ€ν 컨ν μ€νΈ |
| μ μ μ½λ | μ μμ μ‘΄μ¬νλ μμ€μ½λ, μ μμ μ μλ ν¨μ, ν΄λμ€ λ±μ ν¬ν¨λμ§ μμ. | μ μ μ€ν 컨ν μ€νΈ |
| ν¨μ μ½λ | ν¨μ λ΄λΆμ μ‘΄μ¬νλ μμ€μ½λ, λ΄λΆμ μ μλ ν¨μ, ν΄λμ€ λ±μ ν¬ν¨νμ§ μμ. | ν¨μ μ€ν 컨ν μ€νΈ |
| eval μ½λ | eval ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ€νλλ μμ€μ½λ. | eval μ€ν 컨ν μ€νΈ |
| λͺ¨λ μ½λ | λͺ¨λ λ΄λΆμ μ‘΄μ¬νλ μμ€μ½λ, λͺ¨λ λ΄λΆμ ν¨μ, ν΄λμ€ λ±μ ν¬ν¨νμ§ μμ. | λͺ¨λ μ€ν 컨ν μ€νΈ |

π νΈμΆ μ€ν(Call Stack)
νΈμΆ μ€νμ΄λ, JavaScript λμκ³Όμ λ¨κ³ μ€, μ€ν(Runtime)μμ νΈμΆν λ΄μ©μ λ΄κ³ μλ μ€νꡬ쑰λ₯Ό λ§ν©λλ€.
JavaScriptλ νκ° λ¨κ³μμ λ§λ μ€ν 컨ν μ€νΈλ₯Ό μ€ν λ¨κ³μμ νΈμΆνκ³ νΈμΆ μ€νμ λ΄μ λμν©λλ€. μμ λ°°μ λ μ€ν 컨ν μ€νΈκ° νΈμΆ μ€νμ λ΄μΌλ©° κ°μ₯ μ΅κ·Όμ λ΄μλ μ€ν 컨ν μ€νΈ λ΄μ©μ κΈ°λ°μΌλ‘ λμνκ³ , μ€νμ΄ λλ μ€ν 컨ν μ€νΈλ₯Ό κΊΌλ΄λ λ°©μμΌλ‘ λμν©λλ€.
μ΄λ μ€ν μΆκ°λ μ€ν 컨ν μ€νΈκ° μ€ν μλ£λμ΄μΌ λ€μ μ€ν 컨ν μ€νΈλ₯Ό μ§νν μ μλλ°, μ΄λ₯Ό λκΈ°(Synchronous)μ μΌλ‘ μ€ννλ€κ³ λ§ν©λλ€.

π₯ μ€ν(Stack)
μ€ν(Stack)μ΄λ, λ°μ΄ν°λ₯Ό μ μ₯νλ λ°©λ² μ€ νλλ‘, 차곑차곑 μμλκ³ μμμ λΆν° μ¬μ©νλ λ°©μμΌλ‘ μ€λͺ ν μ μμ΅λλ€. μ΄λ₯Ό λ€λ₯Έ λ§λ‘ μ μ νμΆ(First In Last Out) νΉμ§μ κ°μ§κ³ μλ μλ£κ΅¬μ‘°λΌκ³ λ§ν μ μμ΅λλ€.
μμΈν λ΄μ©μ μλ κΈμ μ°Έκ³ ν΄λ³΄μκΈ° λ°λλλ€.
2026.01.16 - [Algorithm/κ°λ ] - [μλ£κ΅¬μ‘°] μ€ν(Stack)
[μλ£κ΅¬μ‘°] μ€ν(Stack)
π¦ μ€ν(Stack)μ€ν(Stack)μ λ°μ΄ν°λ₯Ό νμͺ½ λ°©ν₯μΌλ‘λ§ λ£κ³ κΊΌλ΄λ μλ£κ΅¬μ‘°μ λλ€. νμ μ μΆ(LIFO, Last In First Out)λ°©μμΌλ‘ λμνμ¬ κ°μ₯ λ§μ§λ§μ λ€μ΄μ¨ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ λκ°λ ꡬ쑰μ λλ€
blog.dev-sg.cloud
π νΈμΆ μ€ν λμ κ³Όμ
μμ μ½λκ° λμνλ κ³Όμ μ μ 리ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
// μμ μ½λ
const x = 1;
function func1 () {
const y = 2;
function func2 () {
const z = 3;
console.log(x + y + z);
}
func2();
}
func1(); // 6
1. μ μ μ½λμ νκ°

2. μ μ μ½λ μ€νμ μν μ μ μ€ν 컨ν μ€νΈλ₯Ό νΈμΆ μ€νμ μΆκ° λ° μ μ μ½λ μ€ν

3. μ μ μ½λ μ€ν μ€ func1 ν¨μ νΈμΆνμ¬ func1 ν¨μ νκ°

4. func1 ν¨μ μ€νμ μν func1 μ€ν 컨ν
μ€νΈλ₯Ό νΈμΆ μ€νμ μΆκ° λ° func1 ν¨μ μ€ν

5. func1 ν¨μ μ€ν μ€ func2 ν¨μ νΈμΆνμ¬ func2 ν¨μ νκ°

6. func2 ν¨μ μ½λ μ€νμ μν func2 μ€ν 컨ν
μ€νΈ νΈμΆ μ€νμ μΆκ° λ° func2 ν¨μ μ€ν

7. func2 ν¨μ μ€ν μλ£ ν νΈμΆ μ€νμμ func2 μ€ν 컨ν
μ€νΈ μ κ±°

8. func1 ν¨μ μ€ν 컨ν
μ€νΈ λ³΅κ· λ° func1 ν¨μ λ¨μ λΆλΆ μ€ν

9. func1 ν¨μ μ€ν μλ£ ν νΈμΆ μ€νμμ func1 μ€ν 컨ν
μ€νΈ μ κ±°

10. μ μ μ€ν 컨ν
μ€νΈ λ³΅κ· λ° μ μ μ½λ λ¨μ λΆλΆ μ€ν

11. μ μ μ½λ μ€ν μλ£ ν νΈμΆ μ€νμμ μ μ μ€ν 컨ν
μ€νΈ μ κ±°

12. JavaScript λμ μ’
λ£

π ν λμ 보λ νΈμΆ μ€ν λμ κ³Όμ μμ

'WEB > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [JS] λ μ컬 μ€μ½ν(Lexical Scope) λ?? (0) | 2024.06.22 |
|---|