Skip to content

Commit

Permalink
Merge pull request #953 from wuzoo/wuzoo2
Browse files Browse the repository at this point in the history
23-3μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ - 졜주용
  • Loading branch information
Ryan-Dia authored Dec 11, 2023
2 parents c6412be + 6b5f557 commit 0f19240
Showing 1 changed file with 140 additions and 2 deletions.
142 changes: 140 additions & 2 deletions docs/23_μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ/졜주용.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# πŸ“Œ 23μž₯ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

**TIL 기둝일** : 2023.12.08 (23.1 ~ 23.2)
**TIL 기둝일** : 2023.12.08 (23.1 ~ 23.2) / 2023.12.09 (23.3 ~ 23.5)

## λͺ©μ°¨

[1. μ„œλ‘ ](#-μ„œλ‘ )
[2. μ†ŒμŠ€μ½”λ“œμ˜ νƒ€μž…](#-231-μ†ŒμŠ€μ½”λ“œμ˜-νƒ€μž…)
[2. μ†ŒμŠ€μ½”λ“œμ˜ 평가와 μ‹€ν–‰](#-232-μ†ŒμŠ€μ½”λ“œμ˜-평가와-μ‹€ν–‰)
[3. μ†ŒμŠ€μ½”λ“œμ˜ 평가와 μ‹€ν–‰](#-232-μ†ŒμŠ€μ½”λ“œμ˜-평가와-μ‹€ν–‰)
[4. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ μ—­ν• ](#-233-μ‹€ν–‰-μ»¨ν…μŠ€νŠΈμ˜-μ—­ν• )
[5. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ](#-234-μ‹€ν–‰-μ»¨ν…μŠ€νŠΈ-μŠ€νƒ)
[6. λ ‰μ‹œμ»¬ ν™˜κ²½](#-235-λ ‰μ‹œμ»¬-ν™˜κ²½)

## πŸ‘‰ μ„œλ‘ 

Expand Down Expand Up @@ -57,3 +60,138 @@ x = 1;
2. μ†ŒμŠ€μ½”λ“œ μ‹€ν–‰ κ³Όμ •μ—μ„œλŠ” 이미 `var x;`λŠ” μ†ŒμŠ€μ½”λ“œ 평가 κ³Όμ •μ—μ„œ 이미 싀행이 μ™„λ£Œλ˜μ—ˆμœΌλ―€λ‘œ, λ³€μˆ˜ ν• λ‹Ήλ¬Έ `x = 1;`만 μ‹€ν–‰λœλ‹€.

μ†ŒμŠ€μ½”λ“œ μ‹€ν–‰ 과정이 μ‹€ν–‰λ˜κΈ° μœ„ν•΄μ„œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„μ— `x` λ³€μˆ˜κ°€ λ“±λ‘λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. x λ³€μˆ˜κ°€ μ„ μ–Έλœ λ³€μˆ˜λΌλ©΄ 값을 ν• λ‹Ήν•˜κ³  ν• λ‹Ή κ²°κ³Όλ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€.

## πŸ‘‰ 23.3 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ μ—­ν• 

λ‹€μŒ μ˜ˆμ œλŠ” μ „μ—­ μ½”λ“œμ™€ ν•¨μˆ˜ μ½”λ“œλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ 평가와 싀행을 μ‚΄νŽ΄λ³΄μž.

```javascript
// μ „μ—­ λ³€μˆ˜ μ„ μ–Έ
const x = 1;
const y = 2;

function foo(a) {
// 지역 λ³€μˆ˜ μ„ μ–Έ
const x = 10;
const y = 20;

// λ©”μ„œλ“œ 호좜
console.log(a + x + y); // 130
}

// ν•¨μˆ˜ 호좜
foo(100);

// λ©”μ„œλ“œ 호좜
console.log(x + y); // 3
```

1. **μ „μ—­ μ½”λ“œ 평가**

- μ „μ—­ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ•žμ„œ λ¨Όμ € μ „μ—­ μ½”λ“œ 평가 과정을 거치며 μ „μ—­ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ€€λΉ„
- μ†ŒμŠ€μ½”λ“œ 평가 κ³Όμ •μ—μ„œλŠ” μ„ μ–Έλ¬Έλ§Œ λ¨Όμ € μ‹€ν–‰, λ”°λΌμ„œ μ „μ—­ μ½”λ“œμ˜ λ³€μˆ˜, ν•¨μˆ˜ 선언문이 λ¨Όμ € μ‹€ν–‰
- μ „μ—­ λ³€μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜κ°€ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” μ „μ—­ μŠ€μ½”ν”„μ— 등둝

2. **μ „μ—­ μ½”λ“œ μ‹€ν–‰**

- μ „μ—­ μ½”λ“œ 평과 과정이 λλ‚˜κ³  λŸ°νƒ€μž„μ΄ μ‹œμž‘λ˜μ–΄ μ „μ—­ μ½”λ“œ 순차적으둜 μ‹€ν–‰
- μ „μ—­ λ³€μˆ˜μ— κ°’ ν• λ‹Ή, ν•¨μˆ˜ 호좜
- ν•¨μˆ˜ 호좜 μ‹œ 순차적으둜 μ§„ν–‰λ˜λ˜ μ „μ—­ μ½”λ“œ 싀행을 μΌμ‹œ μ€‘λ‹¨ν•˜κ³  ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ§„μž…

3. **ν•¨μˆ˜ μ½”λ“œ 평가**

- ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ§„μž…ν•˜λ©΄ ν•¨μˆ˜ λ‚΄λΆ€μ˜ 문듀을 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ μ½”λ“œ 평가 과정을 κ±°μΉœλ‹€. ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰ μ€€λΉ„
- λ§€κ°œλ³€μˆ˜μ™€ 지역 λ³€μˆ˜ μ„ μ–Έλ¬Έ μ‹€ν–‰
- μƒμ„±λœ λ§€κ°œλ³€μˆ˜μ™€ 지역 λ³€μˆ˜κ°€ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ κ΄€λ¦¬ν•˜λŠ” 지역 μŠ€μ½”ν”„μ— 등둝
- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 지역 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš© κ°€λŠ₯ν•œ `arguments` 객체가 μƒμ„±λ˜μ–΄ 지역 μŠ€μ½”ν”„μ— 등둝 + `this` 바인딩 κ²°μ •

4. **ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰**

- ν•¨μˆ˜ μ½”λ“œ 평가 과정이 λλ‚˜κ³  λŸ°νƒ€μž„μ΄ μ‹œμž‘λ˜μ–΄ ν•¨μˆ˜ μ½”λ“œ 순차적 μ‹€ν–‰
- λ§€κ°œλ³€μˆ˜μ™€ 지역 λ³€μˆ˜μ— 값이 ν• λ‹Ή, `console.log` λ©”μ„œλ“œκ°€ 호좜
- console.log μ‹€ν–‰ μœ„ν•΄ console을 μŠ€μ½”ν”„ 체인을 톡해 검색
- 이λ₯Ό μœ„ν•΄ ν•¨μˆ˜ μ½”λ“œμ˜ 지역 μŠ€μ½”ν”„λŠ” μƒμœ„ μŠ€μ½”ν”„μΈ μ „μ—­ μŠ€μ½”ν”„μ™€ μ—°κ²°λ˜μ–΄μ•Ό ν•œλ‹€.
- console은 μŠ€μ½”ν”„ 체인에 μ—†μœΌλ©° μ „μ—­ 객체의 ν”„λ‘œνΌν‹°λ‘œ μ‘΄μž¬ν•˜λ―€λ‘œ, μ „μ—­ 객체의 ν”„λ‘œνΌν‹°κ°€ μ „μ—­ μŠ€μ½”ν”„λ₯Ό 톡해 검색 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
- log ν”„λ‘œνΌν‹°λ₯Ό console 객체의 ν”„λ‘œν† νƒ€μž… 체인을 톡해 검색
- κ·Έ ν›„ 인수둜 μ „λ‹¬λœ ν‘œν˜„μ‹ `a + x + y`κ°€ 평가, 각각의 μ‹λ³„μžλ₯Ό μŠ€μ½”ν”„ 체인을 톡해 κ²€μƒ‰ν•œλ‹€.
- console.log μ’…λ£Œ ν›„ ν•¨μˆ˜ μ‹€ν–‰ 과정이 μ’…λ£Œλ˜κ³ , λ‹€μ‹œ λŒμ•„κ°€ μ „μ—­ μ½”λ“œ μ‹€ν–‰ κ³„μ†λœλ‹€.

ν•¨μˆ˜ 호좜 μ’…λ£Œ μ‹œ μ΄μ „μœΌλ‘œ λ˜λŒμ•„κ°€κΈ° μœ„ν•΄ ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ™€ 이전에 μ‹€ν–‰ν•˜λ˜ μ½”λ“œλ₯Ό κ΅¬λΆ„ν•˜μ—¬ 관리해야 ν•œλ‹€. **이처럼 μ½”λ“œκ°€ μ‹€ν–‰λ˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μŠ€μ½”ν”„, μ‹λ³„μž, μ½”λ“œ μ‹€ν–‰ μˆœμ„œ λ“±μ˜ 관리가 ν•„μš”ν•˜λ‹€.**

> 1. 선언에 μ˜ν•΄ μƒμ„±λœ λͺ¨λ“  μ‹λ³„μžλ₯Ό μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ λ“±λ‘ν•˜κ³  μƒνƒœ λ³€ν™”(μ‹λ³„μžμ— λ°”μΈλ”©λœ κ°’μ˜ λ³€ν™”)λ₯Ό μ§€μ†μ μœΌλ‘œ 관리할 수 μžˆμ–΄μ•Ό ν•œλ‹€.
>
> 2. μŠ€μ½”ν”„λŠ” 쀑첩 관계에 μ˜ν•΄ μŠ€μ½”ν”„ 체인을 ν˜•μ„±ν•΄μ•Ό ν•œλ‹€. 즉, μŠ€μ½”ν”„ 체인을 톡해 μƒμœ„ μŠ€μ½”ν”„λ‘œ μ΄λ™ν•˜λ©° μ‹λ³„μžλ₯Ό 검색할 수 μžˆμ–΄μ•Ό ν•œλ‹€.
>
> 3. ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό λ³€κ²½ν•  수 μžˆμ–΄μ•Ό ν•˜λ©° λ‹€μ‹œ λ˜λŒμ•„κ°ˆ μˆ˜λ„ μžˆμ–΄μ•Ό ν•œλ‹€.
이 λͺ¨λ“  것을 κ΄€λ¦¬ν•˜λŠ” 것이 λ°”λ‘œ "μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ"이닀.

**μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±μ˜ 이름)λ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„μ™€ μ½”λ“œ μ‹€ν–‰ μˆœμ„œ 관리λ₯Ό κ΅¬ν˜„ν•œ λ‚΄λΆ€ λ§€μ»€λ‹ˆμ¦˜μœΌλ‘œ, λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹€ν–‰λ˜κ³  κ΄€λ¦¬ν•œλ‹€.**

μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ **λ ‰μ‹œμ»¬ ν™˜κ²½**, μ½”λ“œ μ‹€ν–‰ μˆœμ„œλŠ” **μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ**으둜 κ΄€λ¦¬ν•œλ‹€.

## πŸ‘‰ 23.4 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ

```javascript
const x = 1;

function foo() {
const y = 2;

function bar() {
const z = 3;
console.log(x + y + z);
}
bar();
}

foo(); // 6
```

μœ„μ˜ 예제λ₯Ό 보면 μ „μ—­ μ½”λ“œμ™€ ν•¨μˆ˜ μ½”λ“œλ‘œ 이루어져 μžˆλ‹€. λ”°λΌμ„œ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ¨Όμ € μ „μ—­ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 생성 ν›„, ν•¨μˆ˜κ°€ 호좜되면 ν•¨μˆ˜ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œλ‹€.

μ΄λ•Œ μƒμ„±λœ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μŠ€νƒ<sup>stack</sup> 자료ꡬ쑰둜 κ΄€λ¦¬λœλ‹€. 이λ₯Ό **μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ**이라 λΆ€λ₯Έλ‹€.

cf) EC : Execution Context
![](https://velog.velcdn.com/images/wuzoo/post/1893eda0-c656-4bb5-af45-5e0976aa5e6b/image.png)

1. **μ „μ—­ μ½”λ“œμ˜ 평가와 μ‹€ν–‰**
μ „μ—­ μ½”λ“œλ₯Ό 평가 ν›„ μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œν•œλ‹€. μ „μ—­ λ³€μˆ˜ `x`와 μ „μ—­ ν•¨μˆ˜ `foo`λŠ” μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœλ‹€. μ „μ—­ μ½”λ“œ μ‹€ν–‰ μ‹œμž‘ν•˜μ—¬ μ „μ—­ λ³€μˆ˜ `x`에 값이 ν• λ‹Ήλ˜κ³  μ „μ—­ ν•¨μˆ˜ `foo`κ°€ ν˜ΈμΆœλœλ‹€.

2. **foo ν•¨μˆ˜ μ½”λ“œμ˜ 평가와 μ‹€ν–‰**
`foo`κ°€ 호좜되면 μ „μ—­ μ½”λ“œ 싀행은 μΌμ‹œ μ€‘λ‹¨λ˜κ³  μ½”λ“œμ˜ μ œμ–΄κΆŒμ΄ foo ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ΄λ™ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 foo ν•¨μˆ˜ λ‚΄λΆ€μ˜ ν•¨μˆ˜ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ foo ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œν•œλ‹€. μ΄λ•Œ foo ν•¨μˆ˜μ˜ 지역 λ³€μˆ˜ `y`와 쀑첩 ν•¨μˆ˜ `bar`κ°€ foo ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœλ‹€.

3. **bar ν•¨μˆ˜ μ½”λ“œμ˜ 평가와 μ‹€ν–‰**
쀑첩 ν•¨μˆ˜ barκ°€ 호좜되면 foo ν•¨μˆ˜ μ½”λ“œμ˜ 싀행은 μΌμ‹œ μ€‘λ‹¨λ˜κ³  μ½”λ“œ μ œμ–΄κΆŒμ΄ bar ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ΄λ™ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 bar ν•¨μˆ˜ λ‚΄λΆ€μ˜ ν•¨μˆ˜ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ bar ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œν•œλ‹€. μ΄λ•Œ bar ν•¨μˆ˜μ˜ 지역 λ³€μˆ˜ `z`κ°€ bar ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ“±λ‘λœλ‹€.

4. **foo ν•¨μˆ˜ μ½”λ“œλ‘œ 볡귀**
bar ν•¨μˆ˜ μ’…λ£Œλ˜κ³  μ½”λ“œμ˜ μ œμ–΄κΆŒμ€ λ‹€μ‹œ foo둜 μ΄λ™ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 bar ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ νŒν•˜μ—¬ μ œκ±°ν•œλ‹€.

5. **μ „μ—­ μ½”λ“œλ‘œ 볡귀**
foo ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ μ½”λ“œμ˜ μ œμ–΄κΆŒμ€ λ‹€μ‹œ μ „μ—­ μ½”λ“œλ‘œ μ΄λ™ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 foo ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ νŒν•˜μ—¬ μ œκ±°ν•œλ‹€. 그리고 더 이상 μ‹€ν–‰ν•  μ „μ—­ μ½”λ“œκ°€ λ‚¨μ•„μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ„ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ νŒλ˜μ–΄ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—λŠ” 아무것도 λ‚¨μ•„μžˆμ§€ μ•Šκ²Œ λœλ‹€.

> 이처럼 **μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ€ μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•œλ‹€.**
>
> μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ˜ μ΅œμƒμœ„μ— μ‘΄μž¬ν•˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ–Έμ œλ‚˜ ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ‹€. 이λ₯Ό **μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ**라 λΆ€λ₯Έλ‹€.
## πŸ‘‰ 23.5 λ ‰μ‹œμ»¬ ν™˜κ²½

λ ‰μ‹œμ»¬ ν™˜κ²½<sup>Lexical Environment</sup> 은 μ‹λ³„μžμ™€ μ‹λ³„μžμ— λ°”μΈλ”©λœ κ°’, 그리고 μƒμœ„ μŠ€μ½”ν”„μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό κΈ°λ‘ν•˜λŠ” 자료ꡬ쑰둜 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‹€.

![](https://velog.velcdn.com/images/wuzoo/post/9d4a01a7-626b-4fac-a3d3-788b2180a017/image.png)

λ ‰μ‹œμ»¬ ν™˜κ²½μ€ 킀와 값을 κ°–λŠ” 객체 ν˜•νƒœμ˜ μŠ€μ½”ν”„λ₯Ό μƒμ„±ν•˜μ—¬ μ‹λ³„μžλ₯Ό ν‚€λ‘œ λ“±λ‘ν•˜κ³  μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•œλ‹€. 즉, λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ 역할을 ν•˜λŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ˜ 싀체닀.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” LexicalEnvironment μ»΄ν¬λ„ŒνŠΈμ™€ VariableEnvironment μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬μ„±λœλ‹€. 생성 초기의 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ λ‹€μŒκ³Ό κ°™λ‹€.

![](https://velog.velcdn.com/images/wuzoo/post/26d65270-0bfd-495b-ade0-dce4bfe49903/image.png)

생성 μ΄ˆκΈ°μ— LexicalEnvironment μ»΄ν¬λ„ŒνŠΈμ™€ VariableEnvironment μ»΄ν¬λ„ŒνŠΈλŠ” ν•˜λ‚˜μ˜ λ™μΌν•œ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ°Έμ‘°ν•œλ‹€. μ‹€μ œλ‘œ 이후 λͺ‡ 가지 상황을 λ§Œλ‚˜λ©΄ VariableEnvironmentλ₯Ό μœ„ν•œ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μƒμ„±ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, 이 μ±…μ—μ„œλŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ 톡일해 κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•œλ‹€.

λ ‰μ‹œμ»¬ ν™˜κ²½μ€ λ‹€μŒκ³Ό 같이 두 개의 μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬μ„±λœλ‹€.

1. **ν™˜κ²½ λ ˆμ½”λ“œ**
μŠ€μ½”ν”„μ— ν¬ν•¨λœ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  λ“±λ‘λœ μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ

2. **μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°**
μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λŠ” μƒμœ„ μŠ€μ½”ν”„λ₯Ό 가리킨닀. μƒμœ„ μŠ€μ½”ν”„λž€ ν•΄λ‹Ή μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μƒμœ„ μ½”λ“œμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ λ§ν•œλ‹€. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 톡해 **단방ν–₯ λ§ν¬λ“œ 리슀트인 μŠ€μ½”ν”„ 체인**을 κ΅¬ν˜„ν•œλ‹€.

0 comments on commit 0f19240

Please sign in to comment.