/
πŸ“™

JS Execution Context

JavaScript
Table of contents

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context)

μ½”λ“œκ°€ μ‹€ν–‰λ˜λ €λ©΄ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ μ‹λ³„μžμ™€ λ°”μΈλ”©λœ 값을 관리할 수 μžˆμ–΄μ•Ό ν•œλ‹€.

μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό ν‰κ°€ν•˜κ³  μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³  μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Όλ₯Ό μ‹€μ œλ‘œ κ΄€λ¦¬ν•˜λŠ” μ˜μ—­

  1. 선언에 μ˜ν•΄ μƒμ„±λœ λͺ¨λ“  μ‹λ³„μžμ˜ μŠ€μ½”ν”„λ₯Ό κ΅¬λΆ„ν•˜μ—¬ 등둝, μƒνƒœ λ³€ν™”λ₯Ό μ§€μ†μ μœΌλ‘œ 관리
  2. μŠ€μ½”ν”„ 체인을 톡해 μƒμœ„ μŠ€μ½”ν”„λ‘œ μ΄λ™ν•˜λ©° μ‹λ³„μžλ₯Ό 검색(μŠ€μ½”ν”„λŠ” 쀑첩 관계에 μ˜ν•΄ μŠ€μ½”ν”„ 체인을 ν˜•μ„±)
  3. ν˜„μž¬ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό λ³€κ²½, λ‹€μ‹œ λ˜λŒμ•„κ°ˆ μˆ˜λ„ μžˆλ‹€.

μ „μ—­ μ½”λ“œ 평가

λ³€μˆ˜ μ„ μ–Έλ¬Έκ³Ό ν•¨μˆ˜ 선언문이 ν‰κ°€λ˜κ³ , μ „μ—­ λ³€μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜λŠ” μ „μ—­ μŠ€μ½”ν”„μ— λ“±λ‘λœλ‹€. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜μ™€ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ μ „μ—­ ν•¨μˆ˜λŠ” μ „μ—­ 객체의 ν”„λ‘œνΌν‹°κ°€ λœλ‹€.

μ „μ—­ μ½”λ“œ 평가 μˆœμ„œ

1. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 생성
2. μ „μ—­ λ ‰μ‹œμ»¬ ν™˜κ²½ 생성
2.1. μ „μ—­ ν™˜κ²½ λ ˆμ½”λ“œ 생성
2.1.1. 객체 ν™˜κ²½ λ ˆμ½”λ“œ 생성
2.1.2. 선언적 ν™˜κ²½ λ ˆμ½”λ“œ 생성
2.2. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘° ν• λ‹Ή
2.3. this 바인딩

μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— μƒμ„±λœ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό ν‘Έμ‹œν•˜λ©΄ ν•΄λ‹Ή μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λœλ‹€.

μ „μ—­ μ½”λ“œ μ‹€ν–‰

μ „μ—­ μ½”λ“œ 평가가 μ’…λ£Œλ˜λ©΄ 순차적으둜 μ „μ—­ μ½”λ“œκ°€ μ‹€ν–‰, μ „μ—­ λ³€μˆ˜μ— 값이 ν• λ‹Ήλ˜κ³  ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€. ν•¨μˆ˜κ°€ 호좜되면 순차적으둜 μ‹€ν–‰λ˜λ˜ μ „μ—­ μ½”λ“œμ˜ 싀행을 μΌμ‹œ μ€‘λ‹¨ν•˜κ³  μ½”λ“œ μ‹€ν–‰ μˆœμ„œλ₯Ό λ³€κ²½ν•˜μ—¬ ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ§„μž…ν•œλ‹€.

ν•¨μˆ˜ μ½”λ“œ 평가

맀개 λ³€μˆ˜μ™€ 지역 λ³€μˆ˜ μ„ μ–Έλ¬Έ 평가 ν›„ 지역 μŠ€μ½”ν”„μ— 등둝, μ΄λ•Œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 지역 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλŠ” arguments 객체도 μƒμ„±λ˜μ–΄ 지역 μŠ€μ½”ν”„μ— 등둝 λœλ‹€.

μ „μ—­μ½”λ“œ 평가*
↳ μ „μ—­ λ³€μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ μ„ μ–Έλ¬Έ 평가
⇣
μ „μ—­ μŠ€μ½”ν”„μ— 등둝
⇣
μ „μ—­ μ½”λ“œ 평가 μ’…λ£Œ
μ „μ—­ μ½”λ“œ μ‹€ν–‰*
↳전역 λ³€μˆ˜μ— κ°’ ν• λ‹Ή, ν•¨μˆ˜ 호좜
(ν•¨μˆ˜κ°€ 호좜되면 μ „μ—­ μ½”λ“œ μ‹€ν–‰ μΌμ‹œ 쀑단)
⇣
(호좜된 ν•¨μˆ˜ λ‚΄λΆ€ μ§„μž…
β†³ν•¨μˆ˜ μ½”λ“œ 평가*
β†³λ§€κ°œ λ³€μˆ˜, 지역 λ³€μˆ˜ μ„ μ–Έλ¬Έ 평가, ν•¨μˆ˜ λ‚΄λΆ€ arguments 객체 생성
⇣
지역 μŠ€μ½”ν”„ 등둝
⇣
ν•¨μˆ˜ μ½”λ“œ 평가 μ’…λ£Œ
ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰*
β†³λ§€κ°œ λ³€μˆ˜, 지역 λ³€μˆ˜ κ°’ ν• λ‹Ή
↳(지역 μŠ€μ½”ν”„μ— μ—†λŠ” μ‹λ³„μž
⇣
μŠ€μ½”ν”„ 체인을 톡해 검색)
⇣
ν•¨μˆ˜ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ
ν•¨μˆ˜ 호좜 이전 μ „μ—­ μ½”λ“œ μ‹€ν–‰)
⇣
μ „μ—­ μ½”λ“œ μ‹€ν–‰ μ’…λ£Œ

μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  μŠ€μ½”ν”„μ™€ μ‹€ν–‰ μˆœμ„œ 관리λ₯Ό κ΅¬ν˜„ν•œ λ‚΄λΆ€ λ§€μ»€λ‹ˆμ¦˜, λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 톡해 μ‹€ν–‰λ˜κ³  κ΄€λ¦¬λœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ½”λ“œλ₯Ό ν‰κ°€ν•˜μ—¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό 생성 ν•œλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” stack 자료 ꡬ쑰둜 κ΄€λ¦¬λœλ‹€. 이λ₯Ό μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ(Execution context stack) ν˜Ήμ€ 콜 μŠ€νƒ(Call stack) μ΄λΌν•œλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” LexicalEnviroment μ»΄ν¬λ„ŒνŠΈ, VariableEnviroment μ»΄ν¬λ„ŒνŠΈλ‘œ ꡬ성 λœλ‹€.

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μƒμ„±λ˜λ©΄ VariableEnvironment μ»΄ν¬λ„ŒνŠΈμ™€ LexicalEnvironment μ»΄ν¬λ„ŒνŠΈλŠ” λ™μΌν•œ λ ‰μ‹œμ»¬ ν™˜κ²½(Lexical Enviroment)을 μ°Έμ‘° ν•œλ‹€.

μ½”λ“œκ°€ μ‹€ν–‰λ˜λ‹€κ°€ νŠΉμˆ˜ν•œ 상황을 λ§Œλ‚˜λ©΄ VariableEnvironment μ»΄ν¬λ„ŒνŠΈλ₯Ό μœ„ν•œ μƒˆλ‘œμš΄ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ μƒμ„±ν•˜μ—¬ μƒμ„±ν•˜κ³  μ΄λ•ŒλΆ€ν„° VariableEnvironment μ»΄ν¬λ„ŒνŠΈμ™€ LexicalEnvironment μ»΄ν¬λ„ŒνŠΈλŠ” λ‚΄μš©μ΄ λ‹¬λΌμ§€κ²Œ 되며 이후 주둜 LexicalEnvironment μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•œλ‹€.

λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ 3가지 μ»΄ν¬λ„ŒνŠΈ

ν™˜κ²½ λ ˆμ½”λ“œ(Environment Record)

μŠ€μ½”ν”„μ— ν¬ν•¨λœ μ‹λ³„μžλ₯Ό λ“±λ‘ν•˜κ³  λ“±λ‘λœ μ‹λ³„μžμ— λ°”μΈλ”©λœ 값을 κ΄€λ¦¬ν•˜λŠ” μ €μž₯μ†Œ, ν™˜κ²½ λ ˆμ½”λ“œλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œμ˜ μ’…λ₯˜μ— 따라 λ‚΄μš©μ— 차이가 μžˆλ‹€.

μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ μ°Έμ‘°(Outer Lexical Environment Reference)

μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ κ°€λ¦¬ν‚€λŠ” μ°Έμ‘°λ₯Ό μ €μž₯ν•œλ‹€. μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄λž€ ν•΄λ‹Ή μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μƒμœ„ μ½”λ“œμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ λ§ν•œλ‹€. 이λ₯Ό 톡해 (단방ν–₯ λ§ν¬λ“œ 리슀트인 )μŠ€μ½”ν”„ 체인을 κ΅¬ν˜„ν•œλ‹€.

this 바인딩(This binding)

λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ this에 λ°”μΈλ”©λœ 객체(ThisBinding)λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. this 바인딩은 좔상 μ—°μ‚° ResolveThisBinding을 톡해 κ²°μ •ν•  수 μžˆλ‹€.


ν€΄μ¦ˆ

Q1. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” (a) 자료 ꡬ쑰둜 관리 λœλ‹€. (b) ν˜Ήμ€ (c) 이라 ν•œλ‹€.

  • A.
    (a) μŠ€νƒ(Stack)
    (b) μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒ(Execution context stack)
    (c) 콜 μŠ€νƒ(Call stack)

Q2. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ κ΄€μ μ—μ„œ μŠ€μ½”ν”„ 체인의 λ™μž‘μ„ μ„€λͺ…

  • A.

    running execution context의 Lexical Enviromentμ—μ„œ μ‹λ³„μžλ₯Ό 검색할 수 μ—†μœΌλ©΄ OuterLexicalEnvironmentκ°€ κ°€λ¦¬ν‚€λŠ” μƒμœ„ Lexical Enviroment으둜 μ΄λ™ν•˜μ—¬ μ‹λ³„μžλ₯Ό κ²€μƒ‰ν•œλ‹€.

Q3. 각각 μ–΄λ– ν•œ μš”μ†Œλ₯Ό μ°Ύμ„λ•Œ ν”„λ‘œν† νƒ€μž… 체인과 μŠ€μ½”ν”„ 체인의 차이

  • A.
    ν”„λ‘œν† νƒ€μž… 체인은 객체가 κ°€μ§€κ³ μžˆλŠ” ν”„λ‘œνΌν‹°λ₯Ό μ°Ύμ„λ•Œ μ‚¬μš©λ˜κ³ , μŠ€μ½”ν”„ 체인은 μ‹λ³„μžλ₯Ό μ°Ύμ„λ•Œ μ‚¬μš©λœλ‹€.

Q4. μ „μ—­ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— μƒμ„±λœ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό ν‘Έμ‹œν•˜λ©΄ ν•΄λ‹Ή μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ‹€ν–‰ 쀑인 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ λœλ‹€. ( O / X )

  • A.
    O, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ μŠ€νƒμ— ν‘Έμ‹œλœ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλŠ” μ΅œμƒμœ„μ— μ˜¬λΌκ°€λ©΄μ„œ running execution contextκ°€ λœλ‹€.

Q5. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ κ΄€μ μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ™€ let, const둜 μ„ μ–Έλœ λ³€μˆ˜μ˜ 차이

  • A.
logo
Things I've Learned