โ†ย ๋’ค๋กœ๊ฐ€๊ธฐ

์ฑ•ํ„ฐ 2-1: ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๋ž€?

2023/01/27

์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๋ž€?

์ฝœ ์Šคํƒ

  • ์Šคํƒ ๊ตฌ์กฐ๋กœ ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๋ฅผ ๋‹ด๋Š”๋‹ค

์ฝœ ์Šคํƒ๊ณผ ์ฝ”๋“œ ์‹คํ–‰

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

์‹คํ–‰ ์ปจํƒ์ŠคํŠธ์— ๋‹ด๊ธฐ๋Š” ์ •๋ณด

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

VariableEnvironment์™€ LexicalEnvironment

  • ๋‘˜ ๋‹ค ๋‚ด๋ถ€๋Š” environmentRecord์™€ outerEnvironmentReference๋กœ ๊ตฌ์„ฑ๋œ๋‹ค
  • ์ดˆ๊ธฐํ™” ์‹œ์ ์—” ๋‘˜์ด ์‚ฌ์‹ค์ƒ ๋™์ผํ•˜์ง€๋งŒ, ์ฝ”๋“œ ์ง„ํ–‰์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค

LexicalEnvironment

  • ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด ์ด์ƒํ•ด์ง€๋Š”๋ฐ, ๊ทธ๋ƒฅ ์‚ฌ์ „์ ์ธ ํ™˜๊ฒฝ์ •๋ณด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž
  • ํ˜„์žฌ ์ปจํƒ์ŠคํŠธ์—” ~๋ผ๋Š” ์‹๋ณ„์ž๊ฐ€ ์žˆ๊ณ , ์™ธ๋ถ€์ •๋ณด๋Š” ~๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค๋ผ๋Š”, ์ปจํƒ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ์‚ฌ์ „์—์„œ ์ ‘ํ•˜๋Š” ๋А๋‚Œ์œผ๋กœ ๋ชจ์•„๋†“์€ ๊ฒƒ์ด ๋ฐ”๋กœ LexicalEnvironment์ด๋‹ค.
  • ๋‹ค๋งŒ, ์‚ฌ์ „์ ์ธ ์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ˆ๊นŒ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด๋ž‘ ์–˜๊ธฐํ• ๋• LexicalEnvironment์ด๋ผ๊ณ  ์›๋ฌธ ๊ทธ๋Œ€๋กœ ๋ถ€๋ฅด๋„๋ก ํ•˜์ž

์‹คํ–‰ ์ปจํƒ์ŠคํŠธ ์š”์•ฝ

  • JS์ฝ”๋“œ ์ตœ์ดˆ ์‹คํ–‰ ์‹œ ์ฝœ ์Šคํƒ์— ์ „์—ญ ์ปจํƒ์ŠคํŠธ๊ฐ€ ์Œ“์ด๊ณ , ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ด๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์Œ“์ธ๋‹ค.
  • ์‹คํ–‰์ด ๋๋‚œ ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๋Š” ์ฝœ ์Šคํƒ์—์„œ ์ œ๊ฑฐ๋˜๊ณ , ๊ฐ€์žฅ ์ƒ๋‹จ์— ์žˆ๋Š” ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ์˜ ์‹คํ–‰์ด ์žฌ๊ฐœ๋œ๋‹ค.
  • ์ฝœ ์Šคํƒ์— ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜๋„ ๋‚จ์•„ ์žˆ์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค
  • ์‹คํ–‰ ์ปจํƒ์ŠคํŠธ์—” VariableEnvironment, LexicalEnvironment, ThisBinding์ด ๋‹ด๊ธด๋‹ค.