[JS] ๐Ÿ“ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ โญ

Mec.D's Blogยท2022๋…„ 5์›” 31์ผ
0

JS ES6+ ๋น„๊ณต์‹ ๋…ธํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
7/17
post-thumbnail

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

ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ์กฐ๊ฑด / ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.


ํŠน์ง•

  1. JS ์—”์ง„์ด ์ปดํŒŒ์ผ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ

VariableEnvironment  LexicalEnvironment  ThisBinding

์š”์†Œ์„ค๋ช…
VariableEnvironmentํ˜„์žฌ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จ๋œ ์‹๋ณ„์ž๋ฅผ ์ˆ˜์ง‘ํ•ด ์Šค๋ƒ…์ƒท์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
LexicalEnvironmentํ˜„์žฌ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จ๋œ ์‹๋ณ„์ž์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
ThisBindingํ•จ์ˆ˜ ํ˜ธ์ถœ (Function.prototype.call) ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ๋ฐ›์€ this์˜ ์ฐธ์กฐ๊ฐ’์ž…๋‹ˆ๋‹ค.

VariableEnvironment์™€ LexicalEnvironment ๋น„๊ต

LexicalEnvironmentVariableEnvironment
์šฉ๋„์‹๋ณ„์ž์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๋Š” ์šฉ๋„์‹๋ณ„์ž ์ˆ˜์ง‘ ์šฉ๋„
๊ฐ’ ๋ณ€ํ™”โœ… ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™” ๋ฐ˜์˜โŒ Never changes
๊ตฌ์„ฑ์š”์†ŒenvironmentRecord
: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ creation phase์—
ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์˜ ์‹๋ณ„์ž ์ •๋ณด ์ˆ˜์ง‘

Hoisting์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

outerEnvironmentReference
: ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ฐธ์กฐ
์Šค์ฝ”ํ”„ ์ฒด์ด๋‹์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
environmentRecord์™€
outerEnvironmentRecord์˜ ์Šค๋ƒ…์ƒท

๋™์ž‘ ๋ฐฉ์‹

๐Ÿ…ฐ Creation Phase (Compilation)

ใ€Ž๋ณ€์ˆ˜/ํ•จ์ˆ˜ ์„ ์–ธ, ๋งค๊ฐœ๋ณ€์ˆ˜, scope ์ •๋ณด ์ˆ˜์ง‘ใ€

  1. VariableEnvironment ์ƒ์„ฑ
  2. this ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ (this ๋ฐ”์ธ๋”ฉ)
  3. LexicalEnvironment ์ƒ์„ฑ (VariableEnvironment์˜ ์‚ฌ๋ณธ)
  4. ํ•ด๋‹น ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์ฝœ ์Šคํƒ์— push

๐Ÿ…ฑ Execution Phase

ใ€Ž๊ฐ’ ํ• ๋‹น ๋ฐ ๊ตฌ๋ฌธ ์‹คํ–‰ใ€

  1. ์ฝ”๋“œ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ์ €์žฅ
  2. (๋” ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด) ์‹คํ–‰ ์ปจํ…์ŠคํŠธ pop ํ›„ return ๊ฐ’ ๋ฐ˜ํ™˜

์ข…๋ฅ˜

๐Ÿ‘‰ Functional EC
ํ•จ์ˆ˜ ๋ฒ”์œ„์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

๐ŸŒ Global EC
์ „์—ญ ๋ฒ”์œ„์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ™์ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ Moudule EC
๋ชจ๋“ˆ ๋ฒ”์œ„์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
import ๋  ๋•Œ ์ƒ์„ฑ๋˜๊ณ  ๋ชจ๋“ˆ ์ฝ”๋“œ๊ฐ€ ๋๋‚˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๐Ÿšซ Eval EC (Deperecated)
eval() ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
๋ณด์•ˆ์ƒ ์ทจ์•ฝ์ ์„ ๊ฐ–๊ณ  ์žˆ์–ด ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

profile
๊ธฐ์ˆ ๋กœ ๋” ๋‚˜์€ ๋ฏธ๋ž˜๋ฅผ ๋””์ž์ธํ•˜๋Š” ๊ฐœ๋ฐœ์ž MEC:D ์ž…๋‹ˆ๋‹ค

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN