[๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปTA9 ์ธํ„ด 52์ผ์ฐจ]JS์‹คํ–‰์ปจํ…์ŠคํŠธ

Goofiยท2023๋…„ 9์›” 8์ผ
0

์‹คํ–‰์ปจํ…์ŠคํŠธ(Execution Context)

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ์ด ๋˜๋Š” ์กฐ๊ฑด/ํ™˜๊ฒฝ
โ†’ ์‹คํ–‰์ปจํ…์ŠคํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์ด๋‹ค.

๋™์ผํ™˜ ์กฐ๊ฑด/ํ™˜๊ฒฝ์„ ์ง€๋‹ˆ๋Š” ์ฝ”๋“œ ๋ญ‰์น˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ์กฐ๊ฑด/ํ™˜๊ฒฝ์ •๋ณด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•ด๋‹น ์กฐ๊ฑด(๋™์ผํ•œ ์กฐ๊ฑด/ํ™˜๊ฒฝ์„ ์ง€๋‹ˆ๋Š” ์ฝ”๋“œ ๋ญ‰์น˜)์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  • ์ „์—ญ๊ณต๊ฐ„ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„์— ๋ฐ”๋กœ ์ „์—ญ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ๋๋‚  ๋•Œ์— ๋น„๋กœ์†Œ ์ „์—ญ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ํ•จ์ˆ˜ ๊ณต๊ฐ„์ด๋ผ๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•œ๋‹ค.
  • ํ•จ์ˆ˜
  • eval
  • module : ์–ด๋”˜๊ฐ€์— import ๋˜๋Š” ์ˆœ๊ฐ„์— ๊ทธ ๋ชจ๋“ˆ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ณ  ๊ทธ ๋ชจ๋“ˆ ์ฝ”๋“œ๊ฐ€ ์ „๋ถ€ ๋๋‚ฌ์„ ๋•Œ์— ์ปจํ…์ŠคํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜๋‹ˆ๊นŒ ์—ญ์‹œ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜ ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

๊ฒฐ๋ก  : ํ•ด๋‹น ์กฐ๊ฑด ์ „๋ถ€ ํ•จ์ˆ˜์ด๋‹ค.

๋‹จ) if/for/switch/while...'๋ฌธ'? โ†’ ๋ธ”๋ก์Šค์ฝ”ํ”„
ES6์—์„œ ๋ธ”๋ก์Šค์ฝ”ํ”„ ๊ฐœ๋…์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ let๊ณผ const์— ๋Œ€ํ•ด์„œ ๋ณ„๊ฐœ์˜ ๋…๋ฆฝ๋œ ์—ญํ• ์„ ํ•˜๊ณ ๋Š” ์žˆ์ง€๋งŒ ๋ณ„๊ฐœ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ตœ์ข… ๊ฒฐ๋ก  : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์˜ค์ง ํ•จ์ˆ˜์— ์˜ํ•ด์„œ๋งŒ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

Call Stack

ํ˜„์žฌ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ๋™์ž‘์ค‘์ธ์ง€ ๋‹ค์Œ์— ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ์˜ˆ์ •์ธ์ง€ ๋“ฑ์„ ์ œ์–ดํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—๋Š” ์„ธ ๊ฐ€์ง€ ํ™˜๊ฒฝ ์ •๋ณด๋“ค์ด ๋‹ด๊ธด๋‹ค.

  • Variable Environment

    ์‹๋ณ„์ž ์ •๋ณด์ˆ˜์ง‘
    ๋ณ€ํ™” ๋ฐ˜์˜ X
  • Lexical Environment

    ๊ฐ ์‹๋ณ„์ž์˜ '๋ฐ์ดํ„ฐ' ์ถ”์ 
    ๋ณ€ํ™” ๋ฐ˜์˜ O
  • ThisBinding

Variable Environment ์™€ Lexical Environment์˜ ์ฐจ์ด๋Š” ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜๋А๋ƒ ๊ทธ๋ ‡์ง€ ์•Š๋А๋ƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

Lexical Environment

์‹คํ–‰์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ™˜๊ฒฝ ์ •๋ณด๋“ค์„ ๋ชจ์•„ ์‚ฌ์ „์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•œ ๊ฐ์ฒด

์˜ˆ์‹œ) ๐Ÿ“์‹คํ–‰ ์ปจํ…์ŠคํŠธ A ํ™˜๊ฒฝ ์‚ฌ์ „

  • ๋‚ด๋ถ€ ์‹๋ณ„์ž a : ํ˜„์žฌ ๊ฐ’์€ undefined ์ด๋‹ค.
  • ๋‚ด๋ถ€ ์‹๋ณ„์ž b : ํ˜„์žฌ ๊ฐ’์€ 20์ด๋‹ค.
  • ์™ธ๋ถ€ ์ •๋ณด : D๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

์‹คํ–‰์ปจํ…์ŠคํŠธ๋Š” ๋‘ ๊ฐ€์ง€ ์‹๋ณ„์ž ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.

1. environmentRecord

ํ˜„์žฌ ๋ฌธ๋งฅ์˜ ์‹๋ณ„์ž ์ •๋ณด๊ฐ€ ์ˆ˜์ง‘๋œ๋‹ค.
์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ตœ์ดˆ ์‹คํ–‰ ๋  ๋•Œ ์ œ์ผ ๋จผ์ € ํ•˜๋Š” ์ผ environmentRecord์ด๋‹ค.

โœจ ์ˆ˜์ง‘๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
โ†’ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ์‹๋ณ„์ž ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ environmentRecord์— ๋‹ด๋Š” ๊ณผ์ • ์ด ์ˆ˜์ง‘ ๊ณผ์ •์„ ํ˜ธ์ด์ŠคํŒ…(์‹๋ณ„์ž ์ •๋ณด๋ฅผ ๋Œ์–ด ์˜ฌ๋ฆฐ๋‹ค)์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ˜ธ์ด์ŠคํŒ…์€ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์ „์ฒด๋ฅผ ๋Œ์–ด ์˜ฌ๋ฆฐ๋‹ค.

2. outerEnvironmentReference

ํ˜„์žฌ ๋ฌธ๋งฅ์— ๊ด€๋ จ ์žˆ๋Š” ์™ธ๋ถ€ ์‹๋ณ„์ž ์ •๋ณด

SCOPE(๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„)

  • SCOPE๋Š” ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค.
  • ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
  • SCOPE๋Š” ์™ธ๋ถ€๋กœ๋Š” ๋‚˜๊ฐˆ ์ˆ˜๋Š” ์žˆ๋Š”๋ฐ ์•ˆ์ชฝ์œผ๋กœ๋Š” ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์—†๋‹ค.


inner ํ•จ์ˆ˜์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” outer ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
์™œ๋ƒํ•˜๋ฉด outer ํ•จ์ˆ˜์—๋Š” inner ํ•จ์ˆ˜์˜ LexicalEnvironment์— ๋Œ€ํ•œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด ์—†๋‹ค.(์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋Œ€์ƒ์ด ์—†๋‹ค.)
inner ์ปจํ…์ŠคํŠธ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” environmentRecord์— ์˜ํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. outerEnvironmentReference๋ฅผ ํ†ตํ•ด์„œ outerํ•จ์ˆ˜์˜ LexicalEnvironment ์ •๋ณด์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

SCOPE CHAIN

โ—๏ธ์œ„ ์‚ฌ์ง„ ์ฐธ๊ณ 

1. inner ํ•จ์ˆ˜์—์„œ "์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„๋ผ"๋ผ๊ณ  ๋ช…๋ น
2. ์ผ๋‹จ environmentRecord์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค.
3. ๋งŒ์•ฝ inner์— ์—†๋‹ค๋ฉด outerEnvironment Reference๋ฅผ ํƒ€๊ณ  outerํ•จ์ˆ˜ environmentRecord์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
4. outer์—๋„ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด outerEnvironmentReference๋ฅผ ํƒ€๊ณ  ์ „์—ญ ์ปจํ…์ŠคํŠธ์—๊ฐ€์„œ ์ „์—ญ์ปจํ…์ŠคํŠธ์— environmentRecord์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์ด SCOPE CHAIN์ด๋‹ค.

innerํ•จ์ˆ˜์—์„œ a๋ฅผ ์ฐพ๋Š”๋‹ค
ํ•˜์ง€๋งŒ innerํ•จ์ˆ˜์—๋Š” a๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  outerํ•จ์ˆ˜์— a=2 ์ „์—ญ์ปจํ…์ŠคํŠธ์—๋Š” a=3์žˆ๋‹ค ๊ทธ๋ž˜์„œ innerํ•จ์ˆ˜๋Š” outerEnvironmentReference๋กœ ๋จผ์ € outerํ•จ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— a=2๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

์ •๋ฆฌ

๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ž๊ธฐ ์ž์‹ ๋ถ€ํ„ฐ ์ ์  ๋ฉ€๋ฆฌ ์žˆ๋Š” ์Šค์ฝ”ํ”„๋กœ ์ฐพ์•„ ๋‚˜๊ฐ€๋Š” ๊ฒƒ
์ฆ‰ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ฐพ์•„์ง€๋Š” ๊ฒƒ๋งŒ ์ ‘๊ทผ - shadowing ๊ฐœ๋…

profile
์˜ค๋Š˜๋ณด๋‹จ ๋‚ด์ผ์ด ๊ฐ•ํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค!!๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€