Skip to content

Commit 6771549

Browse files
authored
Merge pull request #51 from InSeong-So/main
✏️ 6회차 λ¬Έμ„œ μˆ˜μ • : 클래슀
2 parents f9908ca + 19adc34 commit 6771549

File tree

3 files changed

+245
-3
lines changed

3 files changed

+245
-3
lines changed

β€ŽJavascript/README.mdβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
</tr>
105105
<tr>
106106
<td><a href="https://github.com/FECrash/JavascriptCrash/blob/main/Javascript/execution_context.md">μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ</a></td>
107-
<td>λ‚΄μš© μΆ”κ°€ ν•„μš”</td>
107+
<td>-</td>
108108
</tr>
109109
<tr>
110110
<td><a href="https://github.com/FECrash/JavascriptCrash/blob/main/Javascript/closure.md">ν΄λ‘œμ €</a></td>

β€ŽJavascript/class.mdβ€Ž

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,5 +193,247 @@ console.log(me instanceof Person); // true
193193
- μžμ‹ ν΄λž˜μŠ€μ—μ„œ constructorλ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ λΆ€λͺ¨μ˜ constructorλ₯Ό λ°”λΌλ΄…λ‹ˆλ‹€.
194194
- κ·ΈλŸ¬λ‚˜ μžμ‹ ν΄λž˜μŠ€μ—μ„œ constructorλ₯Ό μ„ μ–Έν–ˆμŒμ—λ„ super() ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
195195

196+
super ν‚€μ›Œλ“œλŠ” 양이 λ§Žμ•„ 단원을 λΆ„λ¦¬ν•©λ‹ˆλ‹€.
197+
198+
<br>
199+
200+
## super ν‚€μ›Œλ“œ
201+
> super ν‚€μ›Œλ“œλŠ” ν•¨μˆ˜μ²˜λŸΌ ν˜ΈμΆœν•˜κ±°λ‚˜ this와 같이 μ‹λ³„μžμ²˜λŸΌ μ°Έμ‘°ν•  수 μžˆλŠ” νŠΉμˆ˜ν•œ ν‚€μ›Œλ“œμž…λ‹ˆλ‹€.
202+
203+
super ν‚€μ›Œλ“œλŠ” μ•„λž˜μ™€ 같이 λ™μž‘ν•©λ‹ˆλ‹€.
204+
1. superλ₯Ό **호좜**ν•˜λ©΄ 슈퍼 클래슀의 constructor()λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
205+
2. superλ₯Ό **μ°Έμ‘°**ν•˜λ©΄ 슈퍼 클래슀의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.
206+
207+
μžμ„Ένžˆ μ•Œμ•„λ³ΌκΉŒμš”?
208+
209+
<br>
210+
211+
### super 호좜
212+
> new μ—°μ‚°μžμ™€ ν•¨κ»˜ μ„œλΈŒ 클래슀λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ μ „λ‹¬ν•œ μΈμˆ˜λŠ” super ν˜ΈμΆœμ„ 톡해 슈퍼 클래슀의 constructor()에 μ „λ‹¬λ©λ‹ˆλ‹€.
213+
214+
슈퍼 ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€ν•œ ν”„λ‘œνΌν‹°μ™€ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€ν•œ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€λ©΄ μ„œλΈŒ 클래슀의 constructorλ₯Ό μƒλž΅ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
215+
216+
λ˜ν•œ new μ—°μ‚°μžμ™€ ν•¨κ»˜ μ„œλΈŒ 클래슀λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ μ „λ‹¬ν•œ 인수λ₯Ό 슈퍼 클래슀의 constructor에 super ν‚€μ›Œλ“œλ₯Ό ν†΅ν•˜μ—¬ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
217+
```js
218+
// 슈퍼 클래슀
219+
class Base {
220+
constructor(a, b) { // β‘£
221+
this.a = a;
222+
this.b = b;
223+
}
224+
}
225+
226+
// μ„œλΈŒ 클래슀
227+
class Derived extends Base {
228+
// μ•”λ¬΅μ μœΌλ‘œ constructorκ°€ μ •μ˜λ˜μ§€λ§Œ 직접 μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
229+
// constructor(...args) { super(...args); }
230+
constructor(a, b, c) {
231+
super(a, b);
232+
this.c = c;
233+
}
234+
}
235+
236+
const derived = new Derived(1, 2, 3);
237+
console.log(derived); // Derived {a: 1, b: 2, c: 3}
238+
```
239+
240+
이 λ•Œ μ£Όμ˜μ‚¬ν•­μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
241+
1. μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ constructorλ₯Ό μƒλž΅ν•˜μ§€ μ•ŠλŠ” 경우, μ„œλΈŒ 클래슀의 constructor에선 λ°˜λ“œμ‹œ superλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.
242+
```js
243+
class Base {}
244+
245+
class Derived extends Base {
246+
constructor() {
247+
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
248+
console.log('constructor call');
249+
}
250+
}
251+
252+
const derived = new Derived();
253+
```
254+
255+
<br>
256+
257+
2. μ„œλΈŒ 클래슀의 constructorμ—μ„œ superλ₯Ό ν˜ΈμΆœν•˜κΈ° 전에 thisλ₯Ό μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
258+
```js
259+
class Base {}
260+
261+
class Derived extends Base {
262+
constructor() {
263+
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
264+
this.a = 1;
265+
super();
266+
}
267+
}
268+
269+
const derived = new Derived(1);
270+
```
271+
272+
<br>
273+
274+
3. superλŠ” λ°˜λ“œμ‹œ μ„œλΈŒ 클래슀의 constructorμ—μ„œλ§Œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. μ„œλΈŒ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ 클래슀의 constructorλ‚˜ ν•¨μˆ˜μ—μ„œ superλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•΄μš”.
275+
```js
276+
// 슈퍼 클래슀
277+
class Base {
278+
constructor(name) {
279+
this.name = name;
280+
}
281+
282+
sayHi() {
283+
return `Hi! ${this.name}`;
284+
}
285+
}
286+
287+
// μ„œλΈŒ 클래슀
288+
class Derived extends Base {
289+
sayHi() {
290+
// super.sayHiλŠ” 슈퍼 클래슀의 ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
291+
return `${super.sayHi()}. how are you doing?`;
292+
}
293+
}
294+
295+
const derived = new Derived('Lee');
296+
console.log(derived.sayHi()); // Hi! Lee. how are you doing?
297+
```
298+
299+
<br>
300+
301+
### super μ°Έμ‘°
302+
> superλŠ” μžμ‹¬μ„ μ°Έμ‘°ν•˜κ³  μžˆλŠ” λ©”μ„œλ“œκ°€ λ°”μΈλ”©λœ 객체의 ν”„λ‘œν† νƒ€μž…μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
303+
304+
superλ₯Ό 참쑰둜 μ‚¬μš©ν•˜λŠ” ν˜•νƒœλ“€μ„ λ³ΌκΉŒμš”?
305+
306+
- μ„œλΈŒ 클래슀의 ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œ λ‚΄μ—μ„œ `super.λ©”μ„œλ“œ`λŠ” 슈퍼 클래슀의 ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
307+
```js
308+
// 슈퍼 클래슀
309+
class Base {
310+
constructor(name) {
311+
this.name = name;
312+
}
313+
314+
sayHi() {
315+
return `Hi! ${this.name}`;
316+
}
317+
}
318+
319+
// μ„œλΈŒ 클래슀
320+
class Derived extends Base {
321+
sayHi() {
322+
// super.sayHiλŠ” 슈퍼 클래슀의 ν”„λ‘œν† νƒ€μž… λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
323+
return `${super.sayHi()}. how are you doing?`;
324+
}
325+
}
326+
327+
const derived = new Derived('Lee');
328+
console.log(derived.sayHi()); // Hi! Lee. how are you doing?
329+
```
330+
- 단, superκ°€ 슈퍼 클래슀의 λ©”μ„œλ“œκ°€ 바인딩 된 객체인 슈퍼 클래슀의 prototype ν”„λ‘œνΌν‹°μ— λ°”μΈλ”©λœ ν”„λ‘œν† νƒ€μž…μ„ μ°Έμ‘°ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ•„λž˜ μ²˜λŸΌμš”.
331+
```js
332+
// 슈퍼 클래슀
333+
class Base {
334+
constructor(name) {
335+
this.name = name;
336+
}
337+
338+
sayHi() {
339+
return `Hi! ${this.name}`;
340+
}
341+
}
342+
343+
class Derived extends Base {
344+
sayHi() {
345+
// __superλŠ” Base.prototype을 κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
346+
const __super = Object.getPrototypeOf(Derived.prototype);
347+
return `${__super.sayHi.call(this)} how are you doing?`;
348+
}
349+
}
350+
```
351+
- μ΄λ ‡κ²Œ λ™μž‘ν•˜κΈ° μœ„ν•΄ λ©”μ„œλ“œλŠ” λ‚΄λΆ€ 슬둯 `[[HomeObject]]`λ₯Ό κ°€μ§€λ©° μžμ‹ μ„ λ°”μΈλ”©ν•˜κ³  μžˆλŠ” 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
352+
- 단, ES6의 λ©”μ„œλ“œ μΆ•μ•½ ν‘œν˜„μœΌλ‘œ μ •μ˜λœ ν•¨μˆ˜λ§Œ `[[HomeObject]]`λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.
353+
```js
354+
const obj = {
355+
// [[HomeObject]]λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.
356+
foo() {},
357+
// [[HomeObject]]λ₯Ό κ°–μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
358+
bar: function () {}
359+
};
360+
```
361+
362+
<br>
363+
364+
> κ²°κ΅­ super μ°Έμ‘°λ₯Ό μ˜μ‚¬ μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
365+
```js
366+
super = Object.getPrototypeOf([[HomeObject]])
367+
```
368+
1. `[[HomeObject]]`λŠ” λ©”μ„œλ“œ μžμ‹ μ„ λ°”μΈλ”©ν•˜κ³  μžˆλŠ” 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
369+
2. `[[HomeObject]]`λ₯Ό 톡해 λ©”μ„œλ“œ μžμ‹ μ„ λ°”μΈλ”©ν•˜κ³  μžˆλŠ” 객체의 ν”„λ‘œν† νƒ€μž…μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.
370+
3. 예둜 λ“€μžλ©΄, Derived 클래슀의 sayHi λ©”μ„œλ“œλŠ” Derived.prototype에 λ°”μΈλ”©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
371+
- λ”°λΌμ„œ Derived 클래슀의 sayHi λ©”μ„œλ“œμ˜ `[[HomeObject]]`λŠ” Derived.prototype이고, 이λ₯Ό 톡해 Derived 클래슀의 sayHi λ©”μ„œλ“œ λ‚΄λΆ€μ˜ super μ°Έμ‘°κ°€ Base.prototype으둜 κ²°μ •λ©λ‹ˆλ‹€.
372+
- μ΅œμ’…μ μœΌλ‘œ super.sayHiλŠ” Base.prototype.sayHiλ₯Ό κ°€λ¦¬ν‚€κ²Œ 돼죠.
373+
374+
<br>
375+
376+
- μ„œλΈŒ 클래의 정적 λ©”μ„œλ“œ λ‚΄μ—μ„œ `super.λ©”μ„œλ“œ`λŠ” 슈퍼 클래슀의 정적 λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
377+
```js
378+
// 슈퍼 클래슀
379+
class Base {
380+
static sayHi() {
381+
return 'Hi!';
382+
}
383+
}
384+
385+
// μ„œλΈŒ 클래슀
386+
class Derived extends Base {
387+
static sayHi() {
388+
// super.sayHiλŠ” 슈퍼 클래슀의 정적 λ©”μ„œλ“œλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
389+
return `${super.sayHi()} how are you doing?`;
390+
}
391+
}
392+
393+
console.log(Derived.sayHi()); // Hi! how are you doing?
394+
```
395+
396+
<br>
397+
398+
### 상속 클래슀의 μΈμŠ€ν„΄μŠ€ 생성 κ³Όμ •
399+
> ν΄λž˜μŠ€κ°€ λ‹¨λ…μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 과정보닀 상속을 톡해 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 과정이 더 λ³΅μž‘ν•©λ‹ˆλ‹€.
400+
401+
μ„œλΈŒ ν΄λž˜μŠ€κ°€ new μ—°μ‚°μžμ™€ ν•¨κ»˜ 호좜되면 μ•„λž˜μ˜ 과정을 톡해 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
402+
403+
- **μ„œλΈŒ 클래슀의 super 호좜**
404+
- μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 클래슀 평가 μ‹œ 슈퍼 ν΄λž˜μŠ€μ™€ μ„œλΈŒ 클래슀λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ `base` λ˜λŠ” `derived`λ₯Ό κ°’μœΌλ‘œ κ°–λŠ” λ‚΄λΆ€ 슬둯 `[[ConstructorKind]]`λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.
405+
- λ‹€λ₯Έ 클래슀λ₯Ό 상속받지 μ•ŠλŠ” ν΄λž˜μŠ€λŠ” λ‚΄λΆ€ 슬둯 `[[ConstructorKind]]`의 값이 `base`인 반면, λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†λ°›λŠ” ν΄λž˜μŠ€λŠ” `derived`둜 μ„€μ •λ˜λ©° 이λ₯Ό 톡해 λ™μž‘μ΄ κ΅¬λΆ„λ©λ‹ˆλ‹€.
406+
- μƒμ†λ°›λŠ” ν΄λž˜μŠ€κ°€ new μ—°μ‚°μžμ™€ ν•¨κ»˜ 호좜되면 μžμ‹ μ΄ 직접 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  슈퍼 ν΄λž˜μŠ€μ— μΈμŠ€ν„΄μŠ€ 생성을 μœ„μž„ν•©λ‹ˆλ‹€. 이게 λ°”λ‘œ μ„œλΈŒ 클래슀의 constructorμ—μ„œ λ°˜λ“œμ‹œ superλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ” 이유죠.
407+
- superκ°€ 호좜되면 슈퍼 클래슀의 constructorκ°€ ν˜ΈμΆœλ©λ‹ˆλ‹€. μ„œλΈŒ 클래슀의 constructor 내뢀에 super 호좜이 μ—†λ‹€λ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” μ΄μœ λŠ” μ‹€μ œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” μ£Όμ²΄λŠ” 슈퍼 ν΄λž˜μŠ€μ΄λ―€λ‘œ, 슈퍼 클래슀의 constructorκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠμœΌλ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†κΈ° λ•Œλ¬Έμ΄μ£ .
408+
409+
<br>
410+
411+
- **슈퍼 클래슀의 μΈμŠ€ν„΄μŠ€ 생성과 this 바인딩**
412+
- 슈퍼 클래슀의 constructor λ‚΄λΆ€μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° 이전에 μ•”λ¬΅μ μœΌλ‘œ 빈 객체λ₯Ό μƒμ„±ν•˜λŠ”λ°, 이 빈 객체가 클래슀의 μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€. 그리고 μ•”λ¬΅μ μœΌλ‘œ μƒμ„±λœ 빈 κ°μ²΄λŠ” this에 바인딩 되죠. κ²°κ΅­ 슈퍼 클래슀의 constructor λ‚΄λΆ€μ˜ thisλŠ” μƒμ„±λœ thisλ₯Ό κ°€λ¦¬ν‚€κ²Œ λ©λ‹ˆλ‹€.
413+
- 이 λ•Œ μΈμŠ€ν„΄μŠ€λŠ” 슈퍼 ν΄λž˜μŠ€κ°€ μƒμ„±ν•œ κ²ƒμ΄μ§€λ§Œ, new μ—°μ‚°μžμ™€ ν•¨κ²Œ 호좜된 ν΄λž˜μŠ€λŠ” μ„œλΈŒ ν΄λž˜μŠ€μž…λ‹ˆλ‹€. 즉, new μ—°μ‚°μžμ™€ ν•¨κ»˜ 호좜된 ν•¨μˆ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” `new.target`은 μ„œλΈŒ 클래슀λ₯Ό 가리킀며, μΈμŠ€ν„΄μŠ€λŠ” `new.target`이 κ°€λ¦¬ν‚€λŠ” μ„œλΈŒ ν΄λž˜μŠ€κ°€ μƒμ„±ν•œ κ²ƒμœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.
414+
- κ²°κ΅­ μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ˜ ν”„λ‘œν† νƒ€μž…μ€ 슈퍼 클래슀의 prototype ν”„λ‘œνΌν‹°κ°€ κ°€λ¦¬ν‚€λŠ” 객체가 μ•„λ‹ˆλΌ `new.target`이 κ°€λ¦¬ν‚€λŠ” μ„œλΈŒ 클래슀의 prototype ν”„λ‘œνΌν‹°μ˜ 객체가 λ˜λŠ” 것이죠.
415+
416+
<br>
417+
418+
- **슈퍼 클래슀의 μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™”**
419+
- 슈퍼 클래슀의 constructorκ°€ μ‹€ν–‰λ˜κ³  this에 λ°”μΈλ”©λœ μΈμŠ€ν„΄μŠ€λ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
420+
421+
<br>
422+
423+
- **μ„œλΈŒ 클래슀 constructor둜의 볡귀와 this 바인딩**
424+
- super 호좜이 μ’…λ£Œλ˜κ³  μ œμ–΄ 흐름이 μ„œλΈŒ 클래슀둜 λŒμ•„μ˜€λ©΄ superκ°€ λ°˜ν™˜ν•œ μΈμŠ€ν„΄μŠ€κ°€ this에 λ°”μΈλ”©λ©λ‹ˆλ‹€.
425+
- μ„œλΈŒ ν΄λž˜μŠ€λŠ” λ³„λ„μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  superκ°€ λ°˜ν™˜ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό this에 λ°”μΈλ”©ν•˜μ—¬ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.
426+
- 이처럼 superκ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠμœΌλ©΄ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κΈ°λŠ” 컀녕 this 바인딩도 이루어지지 μ•ŠμŠ΅λ‹ˆλ‹€. μ„œλΈŒ 클래슀의 constructorμ—μ„œ superλ₯Ό ν˜ΈμΆœν•˜κΈ° μ „μ—λŠ” thisλ₯Ό μ°Έμ‘°ν•  수 μ—†λŠ” 이유죠.
427+
428+
<br>
429+
430+
- **μ„œλΈŒν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™”**
431+
- μ„œλΈŒ 클래슀의 constructorκ°€ μ‹€ν–‰λ˜κ³  this에 λ°”μΈλ”©λœ μΈμŠ€ν„΄μŠ€μ— ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
432+
433+
<br>
434+
435+
- **μΈμŠ€ν„΄μŠ€ λ°˜ν™˜**
436+
- 클래슀의 λͺ¨λ“  μ²˜λ¦¬κ°€ λλ‚˜λ©΄ μ™„μ„±λœ μΈμŠ€ν„΄μŠ€κ°€ λ°”μΈλ”©λœ thisκ°€ μ•”λ¬΅μ μœΌλ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€.
437+
196438
<hr>
197439
<br>

β€ŽJavascript/execution_context.mdβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
2. μŠ€μ½”ν”„λŠ” 쀑첩 관계에 μ˜ν•΄ `μŠ€μ½”ν”„ 체인을 ν˜•μ„±`ν•΄μ•Ό ν•˜λ©°, μŠ€μ½”ν”„ 체인을 톡해 μƒμœ„ μŠ€μ½”ν”„λ‘œ μ΄λ™ν•˜λ©° μ‹λ³„μžλ₯Ό 검색할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
7070
3. ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό `λ³€κ²½(ν•¨μˆ˜ ν˜ΈμΆœμ— μ˜ν•œ μ‹€ν–‰ μˆœμ„œ λ³€κ²½ λ“±)`ν•  수 μžˆμ–΄μ•Ό ν•˜λ©°, `λ˜λŒμ•„` 갈 μˆ˜λ„ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
7171

72-
이 λͺ¨λ“  것을 κ΄€λ¦¬ν•˜λŠ” 게 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ‹€μ œλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. 즉, **μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±)λ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„μ™€ μ½”λ“œ μ‹€ν–‰ μˆœμ„œ 관리λ₯Ό κ΅¬ν˜„ν•œ λ‚΄λΆ€ λ©”μ»€λ‹ˆμ¦˜μ΄λ©°, λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹€ν–‰λ©λ‹ˆλ‹€**. μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ **λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Enviroment)** 으둜 κ΄€λ¦¬ν•˜κ³ , μ½”λ“œ μ‹€ν–‰ μˆœμ„œλŠ” **μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ**으둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
72+
이 λͺ¨λ“  것을 κ΄€λ¦¬ν•˜λŠ” 게 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ‹€μ œλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. 즉, **μ‹λ³„μž(λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±)λ₯Ό λ“±λ‘ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μŠ€μ½”ν”„μ™€ μ½”λ“œ μ‹€ν–‰ μˆœμ„œ 관리λ₯Ό κ΅¬ν˜„ν•œ λ‚΄λΆ€ λ©”μ»€λ‹ˆμ¦˜μ΄λ©°, λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹€ν–‰λ©λ‹ˆλ‹€**. μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ **λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Environment)** 으둜 κ΄€λ¦¬ν•˜κ³ , μ½”λ“œ μ‹€ν–‰ μˆœμ„œλŠ” **μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ**으둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
7373

7474
μ•„λž˜ μ½”λ“œλ‘œ μ‹€ν–‰ μ»¨νƒμŠ€νŠΈ μŠ€νƒμ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ΄…μ‹œλ‹€.
7575

@@ -142,7 +142,7 @@ out();
142142

143143
<br>
144144

145-
## λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Enviroment)
145+
## λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Environment)
146146
> μ‹λ³„μžμ™€ μ‹λ³„μžμ— 바인딩 된 κ°’, μƒμœ„ μŠ€μ½”ν”„μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό κΈ°λ‘ν•˜λŠ” 자료ꡬ쑰둜 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.
147147
148148
`μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ`이 **μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό 관리**ν•œλ‹€λ©΄ `λ ‰μ‹œμ»¬ ν™˜κ²½`은 **μŠ€μ½”ν”„μ™€ μ‹λ³„μžλ₯Ό 관리**ν•©λ‹ˆλ‹€.

0 commit comments

Comments
Β (0)