220830(ν)
πͺ΄ μ±μ₯μΌμ§
μ±
ν볡ν μ΄κΈ°μ£Όμμ(μ¨μΈ λ€μ΄μ΄)
μ λ΄μ©μ μκ·Ήλ°μ μμνλ μλ°ν μ±μ₯κΈ°λ‘
μ΄μμλ κ½κ³Ό μ£½μ κ½μ μ΄λ»κ² ꡬλ³νλκ°?
μ±μ₯νκ³ μλ κ²μ΄ μ΄μ μλ κ²μ΄λ€.
μλͺ μ μ μΌν μ¦κ±°λ μ±μ₯μ΄λ€!
π³ ν€μλ μ΅λν κ°λ¨νκ² μ 리, μΆνμ 보면μ μ€μ€λ‘ μ€λͺ
JavaScript
μ€ν 컨ν
μ€νΈ
μλ°μ€ν¬λ¦½νΈλ μ»΄νμΌ μΈμ΄μ μ₯μ μ μ·¨ν μΈν°νλ¦¬ν° μΈμ΄μ΄λ€.
μλ°μ€ν¬λ¦½νΈ μ½λλ νκ°(μ»΄νμΌ
) λ¨κ³μ μ€ν(μΈν°ν리ν°
) λ¨κ³λ‘ λλμ΄μ Έμλλ°, νκ° λ¨κ³ ν μ½λ μ€νμ μν νκ²½ μ 보λ₯Ό λͺ¨μλμ κ°μ²΄λ₯Ό νμ±νλ€.
μ¦, μ½λ μ€νμ μν νκ²½ μ 보λ₯Ό λͺ¨μλμ κ°μ²΄κ° μ€ν 컨ν
μ€νΈ
μ΄λ€.
κΈ°λ³Έμ μΌλ‘ μ μ μ½λμ λν μ μ μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ , ν¨μμ νΈμΆ μ ν¨μμ μ μΈλΆλ₯Ό κΈ°μ€μΌλ‘ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ€.
μ½μ€ν(μ€ν 컨ν μ€νΈ μ€ν)
μ€ν μλ£κ΅¬μ‘° ννλ‘ μ€ν 컨ν
μ€νΈκ° μ μ₯λλ ꡬ쑰μ΄λ€. μ΅μλ¨μ μμΉν μ€ν 컨ν
μ€νΈλΆν° μ²λ¦¬νλ©° μ½μ€νμ λΉμλκ°λ€.
μ¦, μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬νλ€.
λ μ컬 νκ²½
νμ¬ μ€ν 컨ν
μ€νΈμμ μ μΈλ μλ³μ(λ³μ, ν¨μ, ν΄λμ€ λ±μ μ΄λ¦)λ₯Ό λ±λ‘νλ€.
μ¦, μλ³μμ μ€μ½νλ₯Ό κ΄λ¦¬νλ€.
μ€ν 컨ν μ€νΈμ ꡬ쑰
- VariableEnvironment: LexicalEnvironmentμ κ°μ κ΅¬μ‘°λ‘ μ΄κΈ°κ°μ snapshot νμμΌλ‘ κ°κ³ μλ€.
- LexicalEnvironment(μ€μ)
- EnvironmentRecord: νμ¬ μ€μ½νμ λν μλ³μ μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄(νΈμ΄μ€ν
κ΄λ ¨)
- Object Envioronment Record: var, ν¨μ μ μΈλ¬Έμ μν λ³μμ λν μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄
- Declarative Environment Record: let, constμ μν λ³μ λ° ν¨μμ λν μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄
- OuterEnvironmentReference: ν¨μκ° μ μλκΈ° μ§μ μ€μ½ν(μΈλΆ μ€μ½ν)μ λν LexicalRecordλ₯Ό μ°Έμ‘°νλ κ°μ²΄(μ€μ½ν 체μΈκ΄λ ¨)
- ThisBinding: κ°μ²΄ λ΄λΆμμ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ thisλ₯Ό bindingνλ κ°μ²΄
- EnvironmentRecord: νμ¬ μ€μ½νμ λν μλ³μ μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄(νΈμ΄μ€ν
κ΄λ ¨)
μ€ν 컨ν μ€νΈ μμ± -> λ μ컬 νκ²½ μμ± -> νκ²½ λ μ½λ μμ±(κ°μ²΄ νκ²½ -> μ μΈμ νκ²½) -> this λ°μΈλ© -> μΈλΆ λ μ컬 νκ²½ μ°Έμ‘° κ²°μ
λΈλ‘ λ 벨 μ€μ½νμ λ μ컬 νκ²½
ifλ¬Έκ³Ό κ°μ λΈλ‘μ΄ νμ±λμμ λ, ν΄λΉ μ½λ λΈλ‘μ μν μλ‘μ΄ λ μ컬 νκ²½μ΄ μμ±λλ©° κΈ°μ‘΄μ λ μ컬 νκ²½κ³Ό κ΅μ²΄νλ€.
varλ ν¨μ λ 벨 μ€μ½ν, let/constλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό κ°λλ€.
λ°λμ κΈ°μ΅ν κ²
μ€ν 컨ν
μ€νΈμ μμ±μ ν¨μλ₯Ό νΈμΆν λμ΄λ€. νμ§λ§ κ·Έ ν¨μμ μ€ν 컨ν
μ€νΈμμ OuterEnvironmentReferenceλ ν¨μλ₯Ό μ μν μμ
μ κΈ°μ€μΌλ‘ μμ μ€μ½νλ₯Ό κ²°μ νλ€λ μ μ κΌ κΈ°μ΅νμ!
JavaScript
ν΄λ‘μ
ν΄λ‘μ λ μ΄λ€ μΈλΆν¨μμ λ³μλ₯Ό μ°Έμ‘°νλ λ΄λΆν¨μ(μ€μ²©ν¨μ)κ° μΈλΆλ‘ μ λ¬λμ΄ μ€νλ μ μμ λ μΌμ΄λλ νμμ΄λ€.
μΈλΆν¨μμ μ€ν 컨ν
μ€νΈλ μ΄λ―Έ μ’
λ£κ° λμμμλ μΈλΆλ‘ μ λ¬λ λ΄λΆν¨μκ° νΈμΆ κ°λ₯νκΈ°μ μΈλΆν¨μμ λ μ컬 νκ²½
μ΄ GC(κ°λΉμ§ μ½λ ν°)μ μν΄ λ©λͺ¨λ¦¬μμ μ κ±°λμ§ μκ² λλ€. μ΄μ κ°μ νμμ΄ κ³§ ν΄λ‘μ
μ΄λ©° μ΄λ° ν΄λ‘μ νμμ μ΄μ©νμ¬ μ½λ°±ν¨μμμ μΈλΆ λ°μ΄ν° μ°Έμ‘°, μ 보 μλ, λΆλΆμ μ©ν¨μ, 컀λ§ν¨μ λ±μΌλ‘ μ΄μ©ν μ μλ€.
ν΄λ‘μ νμ μ κ°λ μ μΌλ‘ μΈλΆν¨μμ λ μ컬 νκ²½ μ λΆκ° λ©λͺ¨λ¦¬μμ μ§μμ§λ©΄ μλμ§λ§, μλ°μ€ν¬λ¦½νΈ μμ§μμλ κ·Έ λ μ컬 νκ²½ λ΄μμ μ€μ λ΄λΆν¨μκ° μ°Έμ‘°νλ λ³μμ λν΄μλ§ μ κ±°λμ§ μλλ‘ κ΅¬νλμ΄μλ€.