๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

[๋‚ด๋ณด๋‚ด๋ฒˆ] Javascript: What Is The Execution Context? What Is The Call Stack?

์–ผ๋งˆ ์ „ GitHub์— ์žˆ๋Š” 33 Concepts Every JavaScript Developer Should Know ๋ผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. 
๋ชจ๋‘ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…๋“ค์ธ๋ฐ ๋ชจ๋ฅด๋Š” ๊ฒƒ๋„ ๋งŽ๊ณ , ์„ค๋ช…ํ•ด๋ณด๋ผ๊ณ  ํ•ด๋„ ๋ชปํ•  ๋‚ด์šฉ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์กฐ๊ธˆ์”ฉ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 
๊ทธ์ค‘ ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์•„ํ‹ฐํด์„ ์ฝ์–ด๋ณด์•˜๊ณ  ๋‚ด๊ฐ€ ์ •๋ฆฌํ•  ๊ฒธ ๊ธฐ์–ตํ•  ๊ฒธ ๋ฒˆ์—ญ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

โ€ป ๋‚ด๋ณด๋‚ด๋ฒˆ(๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ๋‚ด๊ฐ€ ๋ฒˆ์—ญํ•œ): ์˜์–ด ์ „๊ณต์ž๋„ ํ•ด์™ธ ์œ ํ•™ํŒŒ๋„ ์•„๋‹ˆ๊ธฐ์— ๋ฒˆ์—ญ์—๋Š” ์˜์—ญ, ์˜ค์—ญ, ๊ตฌ๊ธ€ ๋ฒˆ์—ญ์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜คํƒ€๋„ ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค. ์ •ํ™•ํ•œ ๋‚ด์šฉ์€ ์›๋ฌธ์„ ์ง์ ‘ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ •๋ณด๋“ค์„ ๋” ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
(ํ•˜์ง€๋งŒ ๋Œ“๊ธ€ ํ”ผ๋“œ๋ฐฑ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜ƒ )

์ด๋ฒˆ์— ๊ณ ๋ฅธ ์•„ํ‹ฐํด์€ Valentino Gagliardi ๋‹˜์ด ์ž‘์„ฑํ•˜์‹  Javascript: What Is The Execution Context? What Is The Call Stack?์ด๋‹ค.

 

Javascript: What Is The Execution Context? What Is The Call Stack?

Ever heard of the Execution Context in Javascript? If not, time to brush up your Javascript skills. In this post we'll see what is the Execution Context in Javascript, what is the Call Stack and how they work together.

web.archive.org

 


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€?

 

Javascript์—์„œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋‚ด๊ฐ€ ์žฅ๋‹ดํ•˜๋Š”๋ฐ ๋‹น์‹ ์€ ์ด ๋‹ต์„ ๋ชจ๋ฅธ๋‹ค.
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์š”์†Œ๋“ค์€ ๋ฌด์—‡์ธ๊ฐ€?
๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์ด์ง€ ์•Š์€๊ฐ€? ๋ชจ๋‘๊ฐ€ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. 
ํ•˜์ง€๋งŒ ๊ทธ ๊ธฐ๋ณธ ์•„๋ž˜์— ๊น”๋ ค์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
์ž๊ธฐ ์ž์‹ ์„ ์ค‘๊ธ‰ (ํ˜น์€ ์‹œ๋‹ˆ์–ด๊นŒ์ง€๋„) ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ ์ „์— ๋งˆ์Šคํ„ฐํ•ด์•ผ ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋‘ฅ๋“ค์€ ๋ฌด์—‡์ธ๊ฐ€?
๋งŽ์ด ์žˆ๋Š”๋ฐ, ์Šค์ฝ”ํ”„, ํด๋กœ์ €, ์ฝœ๋ฐฑ, ํ”„๋กœํ† ํƒ€์ž… ๋“ฑ์ด ์žˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ๊ฐœ๋…๋“ค์„ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ธฐ ์ „์— ์ ์–ด๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. 
์ด ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‘ ๊ฐ€์ง€ ๊ธฐ์ดˆ์ ์ธ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context)์™€ ํ˜ธ์ถœ ์Šคํƒ(Call Stack)์ด๋‹ค.
(๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ๋ผ. ์ƒ๊ฐ๋ณด๋‹ค ์‰ฌ์šธ ํ…Œ๋‹ˆ๊นŒ)
์ค€๋น„๋๋‚˜? 

์ด ์ž๋ฃŒ๋“ค์€ ๋‚˜์˜ ๊ณ ๊ธ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค(์›๊ฒฉ 1:1 ํŠธ๋ ˆ์ด๋‹๊ณผ ์œ ๋Ÿฝ ํ˜„์žฅ ํŠธ๋ ˆ์ด๋‹)์˜ ์ผ๋ถ€๋ถ„์ด๋‹ค. 

๋ชฉ์ฐจ
1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ๋ฌด์—‡์„ ๋ฐฐ์šธ ๊ฒƒ์ธ๊ฐ€
2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰์‹œํ‚ค๋Š”๊ฐ€?
3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„
4. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?
5. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ
6. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€?
7. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ
8. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€? ์ •๋ฆฌ

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ๋ฌด์—‡์„ ๋ฐฐ์šธ ๊ฒƒ์ธ๊ฐ€

์ด ํฌ์ŠคํŠธ์—์„œ ์•„๋ž˜์˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค:

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ
  • ํ˜ธ์ถœ ์Šคํƒ์€ ๋ฌด์—‡์ธ๊ฐ€
  • ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ฐจ์ด์ 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰์‹œํ‚ค๋Š”๊ฐ€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๋™์ž‘์‹œํ‚ค๋Š”๊ฐ€?
๋‹น์‹ ์ด ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋‹ต์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค. 
๋‹น์‹ ์ด ์ดˆ๋ณด์ž๋ผ๋ฉด ํ•จ๊ป˜ ์‚ดํŽด๋ณด์ž. 
์‚ฌ์‹ค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด๋ถ€๋Š” ์‰ฝ์ง€ ์•Š๋‹ค. 
ํ•˜์ง€๋งŒ ๋‹น์‹ ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด์žฅํ•œ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ๋ฐฐ์›Œ๊ฐ€๋ฉด์„œ ์ž์‹ ๊ฐ์„ ๋Š๋ผ๊ณ  ๋” ๋˜‘๋˜‘ํ•ด์กŒ๋‹ค๊ณ  ๋Š๋‚„ ๊ฒƒ์ด๋‹ค. 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ์‚ดํŽด๋ณด๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ์„ธ์„ธํ•œ ๊ฒƒ๊นŒ์ง€ ๋งˆ์Šคํ„ฐํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋” ๋‚˜์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž ๋  ์ˆ˜ ์žˆ๋‹ค. 
๊ทธ๋Ÿผ ์ด์ œ, ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž:

var num = 2;

function pow(num) {
    return num * num;
}

๋‹ค ๋ดค๋Š”๊ฐ€?
๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์›Œ ๋ณด์ด์ง„ ์•Š๋Š”๋‹ค. 
์ด์ œ ํ•œ๋ฒˆ ์–˜๊ธฐ ํ•ด๋ณด์ž: ๋‹น์‹ ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ด๋– ํ•œ ์ˆœ์„œ๋กœ ์ด ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๊ฐ€?
๋‹ค์‹œ ๋งํ•˜๋ฉด, ๋‹น์‹ ์ด ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฉด, ์ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ์„ ๊ฒƒ์ธ๊ฐ€? 
์‰ฌ์šด ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜?
๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ "์Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ pow ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ ๋‹ค์Œ, num์— 2๋ฅผ ํ• ๋‹นํ•˜์ง€"๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 
๋‚ด ํ•™์ƒ๋“ค์˜ ๋Œ€๋‹ต์„ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์€๊ฐ€?
์œ„์—์„œ ์•„๋ž˜๋กœ
๋ธŒ๋ผ์šฐ์ €๋Š” ํ•จ์ˆ˜ pow์—์„œ ์‹œ์ž‘ํ•ด์„œ num * num์„ ๊ณ„์‚ฐํ•œ๋‹ค. 
JS์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ์‹คํ–‰ํ•  ๊ฒƒ์ด๋‹ค.
์˜ˆ์ƒํ•˜๊ธด ํ–ˆ๋‹ค.
๋‚˜๋„ ๋ช‡ ๋…„ ์ „์—๋Š” ๋˜‘๊ฐ™์ด ๋งํ–ˆ์—ˆ๋‹ค.
๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ๋‹น์‹ ์€ ๋‹จ์ˆœํ•œ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋“ค ๋’ค์— ์žˆ๋Š” ์‹œ์Šคํ…œ, ๊ธฐ๊ณ„์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค. 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

๋‹น์‹ ์€ ํ‰๊ท ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€๊ฐ€?
๋ถ„๋ช… ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. 
๋งŒ์•ฝ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ธํ„ฐ๋ทฐ์—์„œ ์ข‹์€ ์ธ์ƒ์„ ์ฃผ๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์ ์–ด๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.
(๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์„ ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค๋„)
์ด๋Ÿฌํ•œ ๊ฐœ๋…๋“ค์— ๋Œ€ํ•ด์„œ ์„œ๋‘๋ฅด์ง€ ๋ง๋ผ. 
๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋ฃจ ์•ˆ์— ๋‹ค ๋ฐฐ์šธ ์ˆœ ์—†๋‹ค. ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. 
์ข‹์€ ์†Œ์‹์ด ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ๋ชจ๋‘๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค„ ๊ฒƒ์ด๋‹ค. (์ ์–ด๋„ ๋…ธ๋ ฅ์€ ํ•˜๊ฒ ๋‹ค.)
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์ฒซ ๋ฒˆ์งธ๋กœ ๋ฌด์„œ์šด ๊ฒƒ๊ณผ ๋งˆ์ฃผํ•ด์•ผ ํ•œ๋‹ค: 
์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์”จ์ด๋‹ค. (mister Execution Context)
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
๋ธŒ๋ผ์šฐ์ € (ํ˜น์€ Node)์—์„œ ๋งค๋ฒˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์—”์ง„์€ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. 
์ด ๊ณผ์ •๋“ค ์ค‘ ํ•˜๋‚˜๋Š” ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Global Execution Context)์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค. 
์ž ๊น ๋ฐœ๋ Œํ‹ฐ๋…ธ, ์—”์ง„์ด ๋ญ์ง€?
์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” "์—”์ง„"์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด๋‹ค. 
์š”์ฆ˜์€ ๋‘ ๊ฐ€์ง€ ์œ ๋ช…ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์žˆ๋‹ค: ๊ตฌ๊ธ€ V8๊ณผ ์ŠคํŒŒ์ด๋”๋ชฝํ‚ค์ด๋‹ค. 
V8์€ ๊ตฌ๊ธ€์˜ ์˜คํ”ˆ ์†Œ์Šค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ๊ตฌ๊ธ€ ํฌ๋กฌ๊ณผ Node.js์— ์‚ฌ์šฉ๋œ๋‹ค. 
์ŠคํŒŒ์ด๋”๋ชฝํ‚ค๋Š” Mozilla์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ํŒŒ์ด์–ดํญ์Šค์— ์‚ฌ์šฉ๋œ๋‹ค. 
์ด์ œ ์šฐ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„๊ณผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 
์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ ์‹œ๊ฐ„์ด๋‹ค. 


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

์—”์ง„์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ๋‹น์‹ ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์„ค๋ช…ํ•˜๋Š” ๊ณ ๊ธ‰ ์–ดํœ˜์ด๋‹ค. 
์ด๋Ÿฌํ•œ ์ถ”์ƒ์ ์ธ ๊ฒƒ๋“ค์€ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๊ทธ ์‹ฌ์ • ์ดํ•ดํ•œ๋‹ค.
์ด์ œ ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์ž๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž: 
// ์ฒจ๋ถ€๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์ด ๊นจ์ง

์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ณด์ž:

var num = 2;

function pow(num) {
    return num * num;
}

์—”์ง„์€ ์ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ๋Š”๊ฐ€? 
์—ฌ๊ธฐ ๊ฐ„๋žตํ•œ ๋ฒ„์ „์ด ์žˆ๋‹ค:
์—”์ง„: ๋ผ์ธ 1. ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋„ค! ์ข‹์•„. ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์ž.
์—”์ง„: ๋ผ์ธ 3. ํ•จ์ˆ˜ ์„ ์–ธ์ด ๋ณด์ด๋Š”๋ฐ. ์ข‹์•„. ํ•จ์ˆ˜๋„ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์ž.
์—”์ง„: ๋๋‚œ ๊ฑฐ ๊ฐ™์€๋ฐ. 
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ”๋“œ๋“ค์„ ์–ด๋–ป๊ฒŒ "๋ณด๋Š๋ƒ๊ณ " ๋‹ค์‹œ ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€๋‹ตํ•˜๊ฒ ๋Š”๊ฐ€?
์Œ, ์ผ์ข…์˜ ์œ„์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๋Š” ๊ฑฐ๊ธด ํ•˜์ง€๋งŒ...
๋ณด๋‹ค์‹œํ”ผ ์—”์ง„์€ pow ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. 
์ด๊ฒƒ์€ ํ•จ์ˆ˜ ์„ ์–ธ์ด์ง€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋‹ค.
์œ„์˜ ์ฝ”๋“œ๋Š” ๋ช‡๋ช‡ ๊ฐ’์œผ๋กœ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค: ํ•จ์ˆ˜ ํ•˜๋‚˜ ๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜ ํ•˜๋‚˜.
์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ?
๋ฐœ๋ Œํ‹ฐ๋…ธ, ์ด๋ฏธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋กœ ํ—ท๊ฐˆ๋ฆฌ๋Š”๋ฐ ์ด์   ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ผ๊ณ ? 
๊ทธ๋ ‡๋‹ค.
์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ญ”์ง€ ์‚ดํŽด๋ณด์ž.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๋„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „์—ญ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜ ์„ ์–ธ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
Kyle Simpson์˜ "Scope and Closures"๋ฅผ ์ฝ์–ด๋ดค๋‹ค๋ฉด ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ „์—ญ ์Šค์ฝ”ํ”„์˜ ๊ฐœ๋…๊ณผ ๊ฒน์นœ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฑ˜์„ ๊ฒƒ์ด๋‹ค. 
์‚ฌ์‹ค ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค. 
๋‚œ ์—ฌ๊ธฐ 10,000ํ”ผํŠธ ๋†’์ด๋กœ ๋‚ ๊ณ  ์žˆ๋‹ค, ๊ทธ๋Ÿด ๋งŒํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. (์ด๊ฑด ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค..)
๊ทธ๊ฒƒ๋“ค์€ ์–ด๋ ค์šด ๊ฐœ๋…์ด๋‹ค. 
๊ทธ๋ž˜๋„ ์ง€๊ธˆ์€ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. 
์šฐ๋ฆฌ ํผ์ฆ ์ค‘ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฐ์„ ์ดํ•ดํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์ด๊ฒƒ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค: 

  • ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ
  • ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ(๋˜ํ•œ ์ „์—ญ ์Šค์ฝ”ํ”„ ํ˜น์€ ์ „์—ญ ๋ณ€์ˆ˜ ํ™˜๊ฒฝ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ)

๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•œ๊ฐ€?
๋‚ด๊ฐ€ ๋‹น์‹ ์ด์—ˆ๋‹ค๋ฉด ์ด ์‹œ์ ์—์„œ ์ด๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค:

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋“ค์„ ์ ๊ณ 
  • ์ž์‹ ์ด ์—”์ง„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ํŒŒ์‹ฑ ํ•œ๋‹ค.
  • ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์˜ ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ทธ๋ ค์„œ ํ‘œํ˜„ํ•ด๋ณธ๋‹ค.

ํ”„๋กœํ† ํƒ€์ดํ•‘ ํˆด ์—†์ด ์ข…์ด์— ์ ์–ด๋„ ๋œ๋‹ค. 
๋‚˜์˜ ์ž‘์€ ์˜ˆ์ œ์˜ ๊ทธ๋ฆผ์€ ์ด๋ ‡๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋‹ค: 
// ์ฒจ๋ถ€๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์ด ๊นจ์ง
๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋ฌด์„œ์šด ๊ฒƒ ํ˜ธ์ถœ ์Šคํƒ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค. 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€?

์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ๋งž๋ฌผ๋ฆฌ๋Š”์ง€ ๋ช…ํ™•ํ•œ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง€๋Š”๊ฐ€? 
๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์‹œ๊ฐ„์„ ๊ฐ–๊ณ  ์ด์ „ ๋ถ€๋ถ„์„ ๋ณต์Šตํ•ด๋ณด๋ผ.
์šฐ๋ฆฌ์˜ ํผ์ฆ์˜ ๋‹ค๋ฅธ ์กฐ๊ฐ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•  ๊ฒƒ์ด๋‹ค: ํ˜ธ์ถœ ์Šคํƒ์ด๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž.
์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค:

  • ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ
  • ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ

๊ทธ์— ๋”ํ•ด ์šฐ๋ฆฌ์˜ ์˜ˆ์ œ์—์„œ ๋” ์ด์ƒ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์€ ์—†๋‹ค:

var num = 2;

function pow(num) {
    return num * num;
}

์ด ์ฝ”๋“œ๋Š” ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
ํ•œ ๋‹จ๊ณ„ ๋” ๋“ค์–ด๊ฐ€์„œ ์‚ดํŽด๋ณด์ž.
ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฌด์—‡์ด ์ผ์–ด๋‚ ๊นŒ?

var num = 2;

function pow(num) {
    return num * num;
}

var res = pow(num);

ํฅ๋ฏธ๋กœ์šด ์งˆ๋ฌธ์ด๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ–‰๋™์€ ์—”์ง„์— ๋„์›€์„ ์š”์ฒญํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋„์›€์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์นœ๊ตฌ๋กœ๋ถ€ํ„ฐ ์˜ค๋Š”๋ฐ ๊ทธ ์นœ๊ตฌ๋Š”: ํ˜ธ์ถœ ์Šคํƒ์ด๋‹ค. 
๊ทธ๋‹ค์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“ค๋ฆฌ์ง€ ์•Š์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๊ณ„์† ํŒŒ์•…ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ ์Šคํƒ์— ์˜์กดํ•œ๋‹ค. 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
ํ˜ธ์ถœ ์Šคํƒ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ํ˜„์žฌ ์‹คํ–‰ ๋กœ๊ทธ์™€ ๊ฐ™๋‹ค. 
์‹ค์ œ๋กœ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ, ์ฆ‰ ์Šคํƒ์ด๋‹ค. 
ํ˜ธ์ถœ ์Šคํƒ์€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?
๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋‘ ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ, ํ‘ธ์‹œ(push)์™€ ํŒ(pop)์ด ์žˆ๋‹ค.
ํ‘ธ์‹œ๋Š” ์Šคํƒ ์•ˆ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋„ฃ๋Š” ํ–‰์œ„์ด๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์—”์ง„์€ ๊ทธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œํ•œ๋‹ค.
๋ชจ๋“  ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œ๋œ๋‹ค. 
๋งจ ๋จผ์ € ํ‘ธ์‹œ๋˜๋Š” ๊ฒƒ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์ธ main() (ํ˜น์€ global())์ด๋‹ค. 
์ด์ œ ์ด์ „ ๊ทธ๋ฆผ์€ ์ด๋ ‡๊ฒŒ ๋ณด์ผ ๊ฒƒ์ด๋‹ค: 
// ์ฒจ๋ถ€๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์ด ๊นจ์ง
ํŒ์€ ๋ฐ˜๋ฉด์— ์Šคํƒ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ–‰์œ„์ด๋‹ค. 
ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์„ ๋งˆ์น˜๋ฉด ํ˜ธ์ถœ ์Šคํƒ์—์„œ ํ•จ์ˆ˜๊ฐ€ ์ œ๊ฑฐ๋œ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ ์Šคํƒ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ด๋‹ค:
// ์ฒจ๋ถ€๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์ด ๊นจ์ง
๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์—ฌ๊ธฐ์—์„œ ๋‹น์‹ ์€ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋…์„ ๋งˆ์Šคํ„ฐํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค. 
๋†๋‹ดํ•˜๋Š” ๊ฑฐ ์•„๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€? ๋‹ค์Œ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•˜๋ผ!


์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ด ๋ณด์ธ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋†“์ณค๋Š”๊ฐ€?
์šฐ๋ฆฌ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•ˆ๋‹ค. 
๊ทธ๋ฆฌ๊ณ , ์ฝ”๋“œ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด:

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋„์›€์„ ์š”์ฒญํ•˜๊ณ 
  • ๊ทธ ๋„์›€์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ์นœ๊ตฌ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ๋ถ€ํ„ฐ ์˜ค๋ฉฐ
  • ํ˜ธ์ถœ ์Šคํƒ์€ ๋‹น์‹ ์˜ ์ฝ”๋“œ์—์„œ ์–ด๋Š ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๊ฒƒ์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ  ์žˆ๋‹ค

ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋˜ ๋‹ค๋ฅธ ํ•œ ๊ฐ€์ง€๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค. 
์ฒซ ๋ฒˆ์งธ๋กœ, ํ•จ์ˆ˜๋Š” ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋‚˜ํƒ€๋‚œ๋‹ค.
๊ทธ๋ฆฌ๊ณ , ํ•จ์ˆ˜ ์˜†์— ๋˜ ๋‹ค๋ฅธ ๋ฏธ๋‹ˆ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. 
๊ทธ ์ž‘์€ ์ƒ์ž๋ฅผ ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Local Execution Context)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 
๋ญ??
๋ˆˆ์น˜์ฑ˜๋‹ค๋ฉด, ์ด์ „ ๊ทธ๋ฆผ์—์„œ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๊ฐ€ ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚˜ํƒ€๋‚ฌ๋‹ค: var res
res ๋ณ€์ˆ˜๋Š” ๋จผ์ € undefined ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
๊ทธ ํ›„ pow๊ฐ€ ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋‚˜ํƒ€๋‚˜์ž๋งˆ์ž, ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  res๋Š” ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. 
์‹คํ–‰ ๋‹จ๊ณ„ ๋™์•ˆ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์•„๋‘๊ธฐ ์œ„ํ•ด์„œ ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. 
์–ผ๋งˆ๋‚˜ ๊ฐ•๋ ฅํ•œ ๊ฐœ๋…์ธ๊ฐ€. 
// ์ฒจ๋ถ€๋˜์–ด์žˆ๋Š” ๊ทธ๋ฆผ์ด ๊นจ์ง
๊ธฐ์–ตํ•ด๋‘๋ผ.
์ „์—ญ๊ณผ ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๋ชจ๋‘๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์Šค์ฝ”ํ”„์™€ ํด๋กœ์ €๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋Š” ํ‚ค์ด๋‹ค. 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€? ํ˜ธ์ถœ ์Šคํƒ์ด๋ž€? ์ •๋ฆฌ

4์ค„์˜ ์ฝ”๋“œ ๋’ค์— ๋ฌด์—‡์ด ์žˆ์—ˆ๋Š”์ง€ ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ, ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ ์Šคํƒ์„ ์ƒ์„ฑํ•œ๋‹ค. 
ํ•˜์ง€๋งŒ ๋‹น์‹ ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—”์ง„์€ ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง€์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
์ด ํฌ์ŠคํŠธ๊ฐ€ ๋๋‚  ๋ฌด๋ ต ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ฌด์—‡์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
์ข…์ข… ๊ฐ„๊ณผ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด๋ถ€๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์ž๋“ค์— ์˜ํ•ด ํ•ญ์ƒ ๋ถˆ๊ฐ€์‚ฌ์˜ํ•œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ฒจ์ง„๋‹ค. 
ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๊ณ ๊ธ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋…์„ ๋งˆ์Šคํ„ฐํ•˜๋Š” ํ‚ค์ด๋‹ค. 
์‹คํ–‰ ์ปจํ…์ŠคํŠธ, ์ „์—ญ ๋ฉ”๋ชจ๋ฆฌ, ํ˜ธ์ถœ ์Šคํƒ์„ ๋ฐฐ์šด๋‹ค๋ฉด, ์Šค์ฝ”ํ”„, ํด๋กœ์ €, ์ฝœ๋ฐฑ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ–์˜ ๊ฒƒ๋“ค์€ ์•„์ฃผ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.
ํŠนํžˆ ํ˜ธ์ถœ ์Šคํƒ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.
์ด๊ฒƒ์„ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ดํ•ด๋˜๊ธฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๋‹ค.
์ตœ์ข…์ ์œผ๋กœ ์™œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋น„๋™๊ธฐ์ธ์ง€ ์™œ ์ฝœ๋ฐฑ์ด ํ•„์š”ํ•œ์ง€๋ฅผ ์ดํ•ดํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. 
4์ค„์˜ ์ฝ”๋“œ ๋’ค์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๊ฐ€?
์ด์ œ๋Š” ์•ˆ๋‹ค. 

Thanks for reading!

This material is part of my Advanced Javascript class available both as remote 1 to 1 training or as on site training in Europe.