Skip to content

Commit f9908ca

Browse files
authored
Merge pull request #50 from InSeong-So/main
✏️ 6회차 λ¬Έμ„œ μˆ˜μ • : μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ
2 parents 5a1a266 + 75eaa47 commit f9908ca

File tree

4 files changed

+128
-1
lines changed

4 files changed

+128
-1
lines changed

β€ŽJavascript/README.mdβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
6st Week<br>
100100
(2021-10-02)
101101
</td>
102-
<td><a href="/FECrash/JavascriptCrash/blob/main/Javascript/function.md#%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4">this</a></td>
102+
<td><a href="/FECrash/JavascriptCrash/blob/main/Javascript/this.md">this</a></td>
103103
<td>-</td>
104104
</tr>
105105
<tr>

β€ŽJavascript/execution_context.mdβ€Ž

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,5 +147,132 @@ out();
147147
148148
`μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ`이 **μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό 관리**ν•œλ‹€λ©΄ `λ ‰μ‹œμ»¬ ν™˜κ²½`은 **μŠ€μ½”ν”„μ™€ μ‹λ³„μžλ₯Ό 관리**ν•©λ‹ˆλ‹€.
149149

150+
λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ μŠ€μ½”ν”„ μ‹λ³„μž 관리 방법은 μ΄λ ‡μŠ΅λ‹ˆλ‹€. 킀와 값을 κ°–λŠ” 객체 ν˜•νƒœμ˜ μŠ€μ½”ν”„(μ „μ—­, ν•¨μˆ˜, 블둝 μŠ€μ½”ν”„)λ₯Ό μƒμ„±ν•˜μ—¬ μ‹λ³„μžλ₯Ό ν‚€λ‘œ λ“±λ‘ν•˜κ³ , μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•˜λŠ” 것이죠. 즉, μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ 역할을 ν•˜λŠ” **λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ˜ 싀체**μž…λ‹ˆλ‹€.
151+
152+
<br>
153+
154+
### μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ ꡬ성
155+
μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” λ ‰μ‹œμ»¬ ν™˜κ²½ μ»΄ν¬λ„ŒνŠΈ(LexicalEnvironment Component)와 λ³€μˆ˜ ν™˜κ²½ μ»΄ν¬λ„ŒνŠΈ(VariableEnvironment Component)둜 κ΅¬μ„±λ˜λ©°, 생성 초기의 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
156+
157+
<br>
158+
159+
<div align='center'>
160+
161+
<img src='./img/execution_context/execution_context_lexical_envrionment.jpg' width='600'/>
162+
163+
</div>
164+
165+
<br>
166+
167+
생성 초기, λ ‰μ‹œμ»¬ ν™˜κ²½ μ»΄ν¬λ„ŒνŠΈμ™€ λ³€μˆ˜ ν™˜κ²½ μ»΄ν¬λ„ŒνŠΈλŠ” λ™μΌν•œ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€. 이후 νŠΉμ • 상황에 따라 각 μ»΄ν¬λ„ŒνŠΈκ°€ κ°€λ¦¬ν‚€λŠ” λ‚΄μš©μ΄ 달라지기도 ν•˜μ§€λ§Œ, 이 μž₯μ—μ„œλŠ” κ·Έλ ‡κ²Œ 깊이 닀루지 μ•Šκ² μŠ΅λ‹ˆλ‹€.
168+
169+
<br>
170+
171+
### λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ ꡬ성
172+
λ ‰μ‹œμ»¬ ν™˜κ²½μ€ ν™˜κ²½ λ ˆμ½”λ“œ μ»΄ν¬λ„ŒνŠΈ(EnvironmentRecord Component)와 μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ°Έμ‘°ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ(OuterLexicalEnvironmentReference)둜 κ΅¬μ„±λ©λ‹ˆλ‹€.
173+
174+
<br>
175+
176+
<div align='center'>
177+
178+
<img src='./img/execution_context/lexical_environment.jpg' width='600'/>
179+
180+
</div>
181+
182+
<br>
183+
184+
- ν™˜κ²½ λ ˆμ½”λ“œ
185+
- μŠ€μ½”ν”„μ— ν¬ν•¨λœ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³ , λ“±λ‘λœ μ‹λ³„μžμ— 바인딩 값을 κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œμž…λ‹ˆλ‹€.
186+
- ν™˜κ²½ λ ˆμ½”λ“œλŠ” μ†ŒμŠ€μ½”λ“œ νƒ€μž…μ— 따라 관리 λ‚΄μš©μ— 차이가 μžˆμŠ΅λ‹ˆλ‹€.
187+
- μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°
188+
- μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λŠ” μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
189+
- μ΄λ•Œ μƒμœ„ μŠ€μ½”ν”„λž€ μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ ν•΄λ‹Ή μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μƒμœ„ μ½”λ“œμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
190+
- μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό 톡해 단방ν–₯ μ—°κ²° 리슀트인 μŠ€μ½”ν”„ 체인을 κ΅¬ν˜„ν•˜μ£ .
191+
192+
<br>
193+
194+
## μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ 생성과 μ‹λ³„μž 검색 κ³Όμ •
195+
> μ–΄λ–»κ²Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜κ³  μ½”λ“œ μ‹€ν–‰ κ²°κ³Όκ°€ κ΄€λ¦¬λ˜λŠ”μ§€, μ–΄λ–»κ²Œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜λŠ”μ§€ μ•Œμ•„λ³ΌκΉŒμš”?
196+
197+
<br>
198+
199+
### μ „μ—­ 객체 생성
200+
μ „μ—­ κ°μ²΄λŠ” μ „μ—­ μ½”λ“œκ°€ ν‰κ°€λ˜κΈ° 이전에 μƒμ„±λ©λ‹ˆλ‹€. μ „μ—­ 객체도 Object.prototype을 상속 λ°›λŠ” ν”„λ‘œν† νƒ€μž… 체인의 μΌμ›μž…λ‹ˆλ‹€.
201+
202+
<br>
203+
204+
### μ „μ—­ μ½”λ“œ 평가
205+
μ†ŒμŠ€μ½”λ“œκ°€ λ‘œλ“œλ˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ•„λž˜μ˜ μˆœμ„œλŒ€λ‘œ μ „μ—­ μ½”λ“œκ°€ ν‰κ°€λ©λ‹ˆλ‹€. λ‚΄μš©μ΄ μž₯ν™©ν•˜λ‹ˆ μ΅œλŒ€ν•œ κ°„λž΅ν•˜κ²Œ, μš”μ λ§Œ κΈ°μˆ ν•©λ‹ˆλ‹€.
206+
207+
- **μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성**
208+
- λΉ„μ–΄μžˆλŠ” μ „μ—­ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œν•©λ‹ˆλ‹€.
209+
- μ „μ—­ μ»¨ν…μŠ€νŠΈλŠ” μ΅œμƒμœ„ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ΄ λ©λ‹ˆλ‹€.
210+
211+
<br>
212+
213+
- **μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성**
214+
- μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μƒμ„±ν•˜κ³  μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ°”μΈλ”©ν•©λ‹ˆλ‹€.
215+
1. μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성
216+
- μ „μ—­ λ³€μˆ˜λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ „μ—­ μŠ€μ½”ν”„, μ „μ—­ 객체의 빌트인 μ „μ—­ ν”„λ‘œνΌν‹°μ™€ 빌트인 μ „μ—­ ν•¨μˆ˜, ν‘œμ€€ 빌트인 객체λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
217+
2. 객체 ν™˜κ²½ λ ˆμ½”λ“œ 생성
218+
- μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ κ°μ²΄λ‘œμ„œ BindingObject(μ „μ—­ 객체 μƒμ„±μ—μ„œ μƒμ„±λœ μ „μ—­ 객체)λΌλŠ” 객체와 μ—°κ²°λ©λ‹ˆλ‹€.
219+
- μ „μ—­ μ½”λ“œ 평가 κ³Όμ •μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜, ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ μ „μ—­ ν•¨μˆ˜λŠ” μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œμ˜ 객체 ν™˜κ²½ λ ˆμ½”λ“œμ— μ—°κ²°λœ BindingObjectλ₯Ό 톡해 μ „μ—­ 객체의 ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œκ°€ λ©λ‹ˆλ‹€.
220+
3. 선언적 ν™˜κ²½ λ ˆμ½”λ“œ 생성
221+
- var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜μ™€ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ μ „μ—­ ν•¨μˆ˜λ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ³€μˆ˜μ™€ ν•¨μˆ˜λŠ” 선언적 ν™˜κ²½ λ ˆμ½”λ“œμ— λ“±λ‘λ˜κ³  κ΄€λ¦¬λ©λ‹ˆλ‹€.
222+
223+
<br>
224+
225+
- **this 바인딩**
226+
- μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œμ˜ `[[GlobalThisValue]]` λ‚΄λΆ€ μŠ¬λ‘―μ— thisκ°€ λ°”μΈλ”©λ˜λ©°, 일반적으둜 λ‚΄λΆ€ μŠ¬λ‘―μ—λŠ” μ „μ—­ 객체가 λ°”μΈλ”©λ©λ‹ˆλ‹€.
227+
- μ „μ—­ μ½”λ“œμ—μ„œ thisλ₯Ό μ°Έμ‘°ν•˜λ©΄ μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œμ˜ `[[GlobalThisValue]]` λ‚΄λΆ€ μŠ¬λ‘―μ— 바인딩 된 객체가 λ°˜ν™˜λ©λ‹ˆλ‹€.
228+
229+
<br>
230+
231+
- **μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ •**
232+
- ν˜„μž¬ 평가 쀑인 μ†ŒμŠ€μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μ™ΈλΆ€ μ†ŒμŠ€μ½”λ“œμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μΈ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
233+
234+
<br>
235+
236+
### μ „μ—­ μ½”λ“œ μ‹€ν–‰
237+
μ „μ—­ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€. 이 λ•Œ μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ—μ„œ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜κ³  μ–΄λŠ μŠ€μ½”ν”„μ˜ μ‹λ³„μžλ₯Ό μ°Έμ‘°ν•˜λ©΄ λ˜λŠ”μ§€ κ²°μ •ν•˜λŠ” μ‹λ³„μž 결정이 μΌμ–΄λ‚©λ‹ˆλ‹€.
238+
239+
<br>
240+
241+
### ν•¨μˆ˜ μ½”λ“œ 평가
242+
ν•¨μˆ˜κ°€ 호좜되면 μ „μ—­ μ½”λ“œμ˜ 싀행을 μΌμ‹œ μ€‘λ‹¨ν•˜κ³  ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ½”λ“œ μ œμ–΄κΆŒμ΄ μ΄λ™ν•©λ‹ˆλ‹€. κ·Έ ν›„ μ•„λž˜μ˜ μˆœμ„œλ‘œ ν•¨μˆ˜ μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ£ .
243+
244+
- **ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성**
245+
- ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
246+
- μƒμ„±λœ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄ μ™„μ„±λœ λ‹€μŒ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œλ©λ‹ˆλ‹€.
247+
- 즉, μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λ©λ‹ˆλ‹€.
248+
249+
<br>
250+
251+
- **ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성**
252+
- ν•¨μˆ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μƒμ„±ν•˜κ³  ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ— λ°”μΈλ”©ν•©λ‹ˆλ‹€.
253+
1. ν•¨μˆ˜ ν™˜κ²½ λ ˆμ½”λ“œ 생성
254+
- ν•¨μˆ˜ ν™˜κ²½ λ ˆμ½”λ“œλŠ” λ§€κ°œλ³€μˆ˜, arguments 객체, ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ μ§€μ—­ λ³€μˆ˜μ™€ λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.
255+
2. this 바인딩
256+
- ν•¨μˆ˜ ν™˜κ²½ λ ˆμ½”λ“œμ˜ `[[ThisValue]]` λ‚΄λΆ€ μŠ¬λ‘―μ— thisκ°€ λ°”μΈλ”©λ˜λ©°, 일반 ν•¨μˆ˜λ‘œ 호좜되면 thisλŠ” μ „μ—­ 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€
257+
- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ thisλ₯Ό μ°Έμ‘°ν•˜λ©΄ ν•¨μˆ˜ ν™˜κ²½ λ ˆμ½”λ“œμ˜ `[[ThisValue]]` λ‚΄λΆ€ μŠ¬λ‘―μ— 바인딩 된 객체가 λ°˜ν™˜λ©λ‹ˆλ‹€.
258+
3. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° κ²°μ •
259+
- ν•¨μˆ˜ μ •μ˜κ°€ ν‰κ°€λœ μ‹œμ μ— μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½ μ°Έμ‘°κ°€ ν• λ‹Ήλ©λ‹ˆλ‹€.
260+
- μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 ν˜„μž¬ μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μΈ μƒμœ„ μŠ€μ½”ν”„λ₯Ό ν•¨μˆ˜ 객체의 λ‚΄λΆ€ 슬둯 `[[Environment]]`에 μ €μž₯ν•©λ‹ˆλ‹€.
261+
262+
<br>
263+
264+
### ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰
265+
ν•¨μˆ˜ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€. 이 λ•Œ μ‹λ³„μž 결정을 μœ„ν•΄ μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ—μ„œ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•˜λ©°, κ²€μƒ‰λœ μ‹λ³„μžμ— 값을 λ°”μΈλ”©ν•©λ‹ˆλ‹€.
266+
267+
<br>
268+
269+
### ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ
270+
μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—μ„œ ν•¨μˆ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ νŒλ˜μ–΄ 제거되고, μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λ©λ‹ˆλ‹€.
271+
272+
<br>
273+
274+
### μ „μ—­ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ
275+
μ‹€ν–‰ν•  μ „μ—­ μ½”λ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μ „μ—­ μ½”λ“œμ˜ 싀행이 μ’…λ£Œλ˜λ©° μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ„ νŒλ˜μ–΄ μ œκ±°λ˜λ―€λ‘œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ—λŠ” 아무것도 남지 μ•Šκ²Œ λ©λ‹ˆλ‹€.
276+
150277
<hr>
151278
<br>
44.7 KB
Loading
34.1 KB
Loading

0 commit comments

Comments
Β (0)