λ§νλ©΄μ λ°°μμ μ€ν°λμμ 곡λΆνλ λ΄μ©μΌλ‘ μ§λ¬Έκ³Ό λλ΅ μμ£Όμ κΈμ λλ€. λν λ΄μ©μ μ€λ₯λ μ€νκ° μμ μ λκΈλ‘ μλ €μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
μ€ν컨ν μ€νΈλ μ€ν κ°λ₯ν μ½λκ° μ€νλκΈ° μν΄ νμν νκ²½μ λ§νλ€. μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ€ν¬λ¦½νΈλ₯Ό μ²μ λ§λ¬μ λ μ μ 컨ν μ€νΈλ₯Ό μμ±νκ³ , μ½ μ€νμ push νλ€. μμ§μ΄ μ€ν¬λ¦½νΈλ₯Ό μ μ½μ΄λ΄λ €κ°λ©΄μ ν¨μ νΈμΆμ λ°κ²¬ν λλ§λ€, ν¨μμ μ€ν 컨ν μ€νΈλ₯Ό μ€νμ push νλ€. μ€μν μ μ ν¨μ μ€ν 컨ν μ€νΈλ ν¨μκ° μ€νλ λ! λ§λ€μ΄μ§λ€λ μ μ΄λ€.
λͺ¨λ μμ€μ½λλ μ€ν μ μ νκ° κ³Όμ μ κ±°μΉλ©° μ€νμ μν μ€λΉλ₯Ό ν©λλ€.
μμ€μ½λ νκ°
μ€ν 컨ν
μ€νΈλ₯Ό μμ±νκ³ λ³μ, ν¨μ λ±μ μ μΈλ¬Έλ§ λ¨Όμ μ€ννμ¬ μμ±λ λ³μλ ν¨μ μλ³μλ₯Ό ν€λ‘ μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½ν(λ μ컬 νκ²½μ νκ²½ λ μ½λ)μ λ±λ‘νλ€.
μμ€μ½λ μ€ν
μ μΈλ¬Έμ μ μΈν μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€νλκΈ° μμ. μ΄λ μ€νμ νμν λ³μ, ν¨μμ μ°Έμ‘°λ₯Ό μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμμ κ²μν΄μ μ·¨λνκ² λλ€.
λͺ¨λ μ½λλ μ€ν 컨ν μ€νΈλ₯Ό ν΅ν΄ μ€νλκ³ κ΄λ¦¬λκΈ° λλ¬Έμ μ½λ μ΄ν΄, λλ²κΉ μ μν΄μλ μ€ν컨ν μ€νΈλ₯Ό κΌ μμμΌλ§ νλ€.
Lexical Environment
, λ³μ
, μ€μ½ν(λ³μμ μ ν¨ λ²μ)
, this
μ€ν컨ν
μ€νΈμλ λνμ μΌλ‘ Lexical Environment
κ°μ²΄κ° μκ³ λ³μ κ°μ²΄, μ€μ½ν μ 보, this λ°μΈλ©μ λν κ²λ€μ ν¬ν¨νκ³ μμ΅λλ€.
λ³μ κ°μ²΄
μ€ν 컨ν
μ€νΈκ° μμ±λλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ€νμ νμν μ¬λ¬ μ 보λ€μ λ΄μ κ°μ²΄λ₯Ό μμ±νλλ° μ΄κ²μ λ³μ κ°μ²΄λΌκ³ νλ€.
μ μ 컨ν
μ€νΈμΈ κ²½μ° λͺ¨λ μ μ λ³μ, μ μ ν¨μ λ±μ ν¬ν¨νλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ³ μ μ κ°μ²΄λ μ μμ μ μΈλ μ μ λ³μμ μ μ ν¨μλ₯Ό νλ‘νΌν°λ‘ μμ νλ€. ν¨μ 컨ν
μ€νΈλ νμ± κ°μ²΄λ₯Ό κ°λ¦¬ν€λ©° arguments κ°μ²΄κ° μΆκ°λλ€.
μ€μ½ν
μλ³μμ μ ν¨λ²μμ΄λ€. μ€ν 컨ν
μ€νΈμμ νμ¬ μ»¨ν
μ€νΈμ μ ν¨ λ²μλ₯Ό λνλ΄λ μ€μ½ν μ 보λ₯Ό μμ±νλλ° μ΄ μ€μ½ν μ 보λ νμ¬ μ€νμ€μΈ 컨ν
μ€νΈ μμμ μ°κ²° 리μ€νΈμ μ μ¬ν νμμΌλ‘ λ§λ€μ΄μ§λ€.
var, let, constμ μ°¨μ΄
varμ ν¨μ μ€μ½ν, letκ³Ό constλ λΈλ‘μ€μ½νλ₯Ό κ°μ§λ€.
this
thisνλ‘νΌν°μλ this κ°μ΄ ν λΉλκ³ ν¨μ νΈμΆ ν¨ν΄μ μν΄ κ²°μ λλ€.
ν ν¨μμ Outer environment referenceλ νμ¬ νΈμΆλ ν¨μκ° μ μΈλ λΉμμ μΈλΆ λ μ컬 νκ²½μ μ°Έμ‘°νλ€. μλ³μμ μ ν¨λ²μλ₯Ό μμμλΆν° λ°κΉ₯μΌλ‘ μ°¨λ‘λ‘ lexical νκ²½μ κ²μν΄ λκ°λ κ²μ λ§ν©λλ€.
μ°μ ν΄λ‘μ λ μΈλΆ ν¨μ λ°μμ λ΄λΆν¨μκ° νΈμΆλλλΌλ μΈλΆν¨μμ μ§μ λ³μμ μ κ·Όν μ μλλ° μ΄λ¬ν ν¨μλ₯Ό ν΄λ‘μ (Closure)λΌκ³ λΆλ¦ λλ€.
λ΄λΆ ν¨μκ° μ ν¨ν μνμμ μΈλΆ ν¨μκ° μ’ λ£νμ¬ μΈλΆ ν¨μμ μ€ν컨ν μ€νΈκ° λ°νλμ΄λ, μΈλΆν¨μ μ€ν컨ν μ€νΈ λ΄μ νμ± κ°μ²΄λ λ΄λΆ ν¨μμ μν΄ μ°Έμ‘°λλ ν μ ν¨νμ¬ λ΄λΆν¨μκ° μ€μ½ν 체μΈμ ν΅ν΄ μ°Έμ‘°ν μ μλ κ²μ μλ―Ένλ€.
μ¦ μΈλΆν¨μκ° μ΄λ―Έ λ°νλμμ΄λ μΈλΆν¨μ λ΄μ λ³μλ μ΄λ₯Ό νμλ‘ νλ λ΄λΆν¨μκ° νλ μ΄μ μ‘΄μ¬νλ κ²½μ° κ³μ μ μ§λλ€.
μλ°μ€ν¬λ¦½νΈ μ½λμμ λ³μ λλ ν¨μ μλ³μλ₯Ό 맡ννλλ° μ¬μ©λλ κ°μ²΄λ‘ outerEnvironmentμ environment recordλ‘ κ΅¬λΆλλ€.
Environment Record(νκ²½ λ μ½λ)
μ€μ½νμ ν¬ν¨λ μλ³μλ₯Ό λ±λ‘νκ³ λ±λ‘λ μλ³μμ λ°μΈλ© λ κ°μ κ΄λ¦¬νλ μ μ₯μμ΄λ€.
μ½λκ° μ€νλκΈ° μ μ μ΄λ―Έ 컨ν μ€νΈμλ μλ³μ μ 보μ, 컨ν μ€νΈμ κ΄λ ¨λ μ λ³΄κ° μ°¨λ‘λλ‘ μμ§λμ΄ μμ΄ μ΄λ―Έ κ·Έ νκ²½μ μν λ³μλͺ λ€μ μκ³ μλλ° μ΄κ²μ νΈμ΄μ€ν (μλ³μλ€μ μ΅μλ¨μΌλ‘ λμ΄λ€ λμ λ€ μ€ν)μ΄λΌκ³ νλ€.
Outer environment Reference(μΈλΆ λ μ컬 νκ²½)
μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€. μμ μ€μ½νλ ν΄λΉ μ€ν 컨ν
μ€νΈλ₯Ό μμ±ν μμ€μ½λλ₯Ό ν¬ν¨νλ μμ μ½λμ λ μ컬 νκ²½μ λ§νλ€. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ₯Ό ν΅ν΄ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈμΈ μ€μ½ν 체μΈμ΄ ꡬνλλ€.
νμ¬ νΈμΆλ ν¨μκ° μ μΈλ λΉμμ μΈλΆ λ μ컬νκ²½μ μ°Έμ‘°νλ€. μμ μ μ€μ½νλ₯Ό μ μΈν μΈλΆ μ½λμ μ°κ΄λμ΄ μλ€.
μλ νμΈμ!
λ³μ κ°μ²΄(Variable Object) < μ κ²½μ° ES5 μ΄μ μμ μ¬μ©λμκ³ ,
νμ¬λ λ μ컬 νκ²½μΌλ‘ λ³κ²½λμλ΅λλ€!
μ΄ λ³μ κ°μ²΄μ μν μ νμ¬ Environment Record μ€ Object Environment Recordμμ νκ³ μμ΄μ! (μ μμ κ²½μ°, μ΄ νκ²½ λ μ½λμ [[Binding Object]] μ μ μκ°μ²΄κ° λ°μΈλ© λλ νμ)
κ΄λ ¨ μλ£ λͺκ°μ§ λκ³ κ°κ² μ΅λλ€!
ES5 μ΄μ μ VO : http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/
stack overflow γWhy variable object was changed to lexical environment in ES5?γ: https://stackoverflow.com/questions/40544709/why-variable-object-was-changed-to-lexical-environment-in-es5
Lexical Environment (VOμμ λ μ컬νκ²½μΌλ‘ λ°λλ μ μ μ€λͺ νλ λ΄μ©, ES5) : https://www.youtube.com/watch?v=OPc73p2d0T8&t=18s