JS Execution Context
Table of contents
μ€ν 컨ν μ€νΈ(Execution Context)
μ½λκ° μ€νλλ €λ©΄ μ€μ½νλ₯Ό ꡬλΆνμ¬ μλ³μμ λ°μΈλ©λ κ°μ κ΄λ¦¬ν μ μμ΄μΌ νλ€.
μ€ν κ°λ₯ν μ½λλ₯Ό νκ°νκ³ μ€ννκΈ° μν΄ νμν νκ²½μ μ 곡νκ³ μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμ
- μ μΈμ μν΄ μμ±λ λͺ¨λ μλ³μμ μ€μ½νλ₯Ό ꡬλΆνμ¬ λ±λ‘, μν λ³νλ₯Ό μ§μμ μΌλ‘ κ΄λ¦¬
- μ€μ½ν 체μΈμ ν΅ν΄ μμ μ€μ½νλ‘ μ΄λνλ©° μλ³μλ₯Ό κ²μ(μ€μ½νλ μ€μ²© κ΄κ³μ μν΄ μ€μ½ν 체μΈμ νμ±)
- νμ¬ μ€ν μ€μΈ μ½λμ μ€ν μμλ₯Ό λ³κ²½, λ€μ λλμκ° μλ μλ€.
μ μ μ½λ νκ°
λ³μ μ μΈλ¬Έκ³Ό ν¨μ μ μΈλ¬Έμ΄ νκ°λκ³ , μ μ λ³μμ μ μ ν¨μλ μ μ μ€μ½νμ λ±λ‘λλ€. 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.