μ€ν 컨ν μ€νΈ
μ€ν 컨ν μ€νΈλ₯Ό λ°λ₯΄κ² μ΄ν΄ νλ€λ©΄ μ μ μλ κ²λ€
- μλ°μ€ν¬λ¦½νΈμ μ€μ½ν κΈ°λ° μλ³μμ μλ³μ λ°μΈλ©μ κ΄λ¦¬νλ λ°©μ
- νΈμ΄μ€ν μ΄ λ°μνλ μ΄μ
- ν΄λ‘μ μ λμ λ°©μ
- νμ€ν¬ νμ ν¨κ» λμνλ μ΄λ²€νΈ νΈλ€λ¬
- λΉλκΈ° μ²λ¦¬μ λμ λ°©μ
μμ€μ½λμ νμ
ECMAScript
μ¬μμ μμ€μ½λλ₯Ό 4κ°μ§ νμ μΌλ‘ ꡬλΆ, μ΄λ μμ€ν¬λλ μ€ν 컨ν μ€νΈλ₯Ό μμ±
μ μ μ½λ(global code ) |
μ μμ μ‘΄μ¬νλ μμ€μ½λ. μ μμ μ μλ ν¨μ, ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨ X |
---|---|
ν¨μ μ½λ(function code ) |
ν¨μ λ΄λΆμ μ‘΄μ¬νλ μμ€μ½λ ν¨μ λ΄λΆμ μ€μ²©λ ν¨μ, ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨ X |
eval μ½λ(eval code ) |
λΉνΈμΈ μ μ ν¨μμΈ eval ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ€νλλ μμ€μ½λ. |
λͺ¨λ μ½λ(module code ) |
λͺ¨λ λ΄λΆμ μ‘΄μ¬νλ μμ€μ½λ. λͺ¨λ λ΄λΆ ν¨μ, ν΄λμ€ λ±μ λ΄λΆ μ½λλ ν¬ν¨ X |
μμ€μ½λλ νμ μ λ°λΌ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ κ³Όμ κ³Ό κ΄λ¦¬ λ΄μ©μ΄ λ€λ₯΄λ€
- μ μ μ½λ
- μ μ λ³μ κ΄λ¦¬λ₯Ό μν΄ μ΅μμ μ€μ½νμΈ μ μ μ€μ½ν μμ±
- varλ‘ μ μΈλ μ μ λ³μμ ν¨μ μ μΈ λ¬ΈμΌλ‘ μ μλ μ μ ν¨μλ₯Ό μ μ κ°μ²΄μ λ°μΈλ©
- ν¨μ μ½λ
- ν¨μ μ½λλ μ§μ μ€μ½νλ₯Ό μμ±
- μ§μλ³μ, 맀κ°λ³μ,
argument
κ°μ²΄ κ΄λ¦° - μμ±ν μ§μ μ€μ½νλ₯Ό μ μ μ€μ½νμμ μμνλ μ€μ½ν 체μΈμΌλ‘ μ°κ²°
eval
μ½λ
strict mode
μμ μμ λ§μ λ μμ μΈ μ€μ½νλ₯Ό μμ±
- λͺ¨λ μ½λ
- λͺ¨λλ³λ‘ λ λ¦μ μΈ λͺ¨λ μ€μ½νλ₯Ό μμ±
κ° νμ λ³λ‘ μμ€μ½λκ° νκ°λλ©΄ κ°κ° λ€λ₯Έ μ€ν 컨ν μ€νΈ μμ±
μμ€μ½λμ νκ°μ μ€ν
- μλ°μ€ν¬λ¦½νΈ μμ§ μ 2κ°μ κ³Όμ μΌλ‘ λλμ΄ μ²λ¦¬
- μμ€μ½λ νκ° μ μμ€μ½λμ μ€ν κ³Όμ μΌλ‘ λλμ΄ μ²λ¦¬
μΆμ² : https://publizm.github.io
μμ€μ½λ νκ°
- μ€ν 컨ν μ€νΈλ₯Ό μμ±νκ³ λ³μ, ν¨μ λ±μ μ μΈλ¬Έλ§ λ¨Όμ μ€ν
- μ μΈλ¬Έ μ€ννμ¬ λ³μ λ ν¨μ μλ³μκ° μμ±λ¨
- μμ±λ μλ³μλ₯Ό ν€λ‘ μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμ λ±λ‘
μ€ν컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½νλ₯Ό λ μ컬 νκ²½μ νκ²½λ μ½λ λΌκ³ ν¨
μμ€μ½λ μ€ν
- νκ° κ³Όμ λλ ν μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€ν (λ°νμ)
- μ΄λ μμ€μ½λ μ€νμ νμν μ 보(λ³μλ ν¨μμ μ°Έμ‘°)λ₯Ό μ€ν 컨ν μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμμ κ²μνμ¬ μ·¨λ
- μ€νλ κ²°κ³Όλ λ€μ μ€ν 컨ν μ€νΈμ λ±λ‘
μ€ν 컨ν μ€νΈμ μν
μ€ν 컨ν μ€νΈμμ μ½λλ₯Ό νκ°νκ³ μ€ν νλ κ³Όμ
μ μ μ½λ νκ°
μ μ λ³μμ μ μ ν¨μλ μ μ μ€μ½νμ λ±λ‘λλ€.
var ν€μλλ‘ μ μΈλ μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ μ μ ν¨μλ μ μ κ°μ²΄μ νλ‘νΌν°κ° λλ€.
μ μ μ½λ μ€ν
λ°νμμμ μ μ λ³μμ κ°μ΄ ν λΉλκ³ ν¨μκ° νΈμΆ λλ€.
ν¨μκ° νΈμΆ λλ©΄ μ μ μ½λμ μ€νμ μΌμ μ€λ¨νκ³ ν¨μ λ΄λΆλ‘ μ§μ
ν¨μ μ½λ νκ°
ν¨μ νΈμΆμ μν΄ μ½λ μ€νμ΄ ν¨μ λ΄λΆλ‘ μ§μ νλ©΄ ν¨μ μ€ν μ΄μ μ νκ° κ³Όμ κ±°μΉ¨
λ§€κ° λ³μμ μ§μ λ³μ μ μΈλ¬Έμ΄ νκ°λκ³ μ§μ μ€μ½ν(ν¨μ μ€ν컨ν μ€νΈ)μ λ±λ‘λλ€.
ν¨μ λ΄λΆμμ μ§μ λ³μμ²λΌ μ¬μ©ν μ μλ arguments κ°μ²΄λ μμ±λμ΄ μ§μ μ€μ½νμ λ±λ‘λλ€.
ν¨μ μ½λ μ€ν
ν¨μ λ΄λΆμ μ½λκ° μμ°¨μ μΌλ‘ μ€ν
맀κ°λ³μμ μ§μλ³μμ κ°μ΄ ν λΉλκ³ ν¨μ λ΄λΆμ λ©μλκ° μμ μ νΈμΆ λ¨( μ΄ λ©μλ μμ μ€μ½ν μ²΄μΈ κ²μ λ° μ½λ νκ°, μ€νκ³Όμ κ±°μΉ¨)
ν¨μ μ½λ μ€ν κ³Όμ μ’ λ£ ν ν¨μ νΈμΆ μ΄μ μΌλ‘ λμκ° μ μ μ½λλ₯Ό μ€ν
μ 리
- μ½λκ° μ€ν λλ €λ©΄ μ€μ½ν, μλ³μ, μ½λ μ€ν μμ λ±μ κ΄λ¦¬κ° νμ (μ΄λ₯Ό κ΄λ¦¬νλ κ²μ΄ μ€ν 컨ν μ€νΈ)
- μ€ν 컨ν μ€νΈλ μμ€μ½λλ₯Ό μ€ννλ λ° νμν νκ²½μ μ 곡, μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμ
- μλ³μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½νμ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ©μ»€λμ¦
- μλ³μμ μ€μ½νλ λ μ컬 νκ²½μΌλ‘ κ΄λ¦¬
- μ€ν μμλ μ€ν 컨ν μ€νΈ μ€νμΌλ‘ κ΄λ¦¬
μ€ν 컨ν μ€νΈ μ€ν
μλ°μ€ν¬λ¦½νΈ μμ§μ λ¨Όμ μ μ μ½λλ₯Ό νκ°νμ¬ μ μ 컨ν μ€νΈλ₯Ό μμ±νλ€.
ν¨μκ° νΈμΆλλ©΄ ν¨μ μ½λλ₯Ό νκ°νμ¬ ν¨μ μ€ν 컨ν μ€νΈλ₯Ό μμ±νλ€.
μ΄λ μμ±λ μ€ν 컨ν μ€νΈλ μ€ν(
stack
)μλ£κ΅¬μ‘°λ‘ κ΄λ¦¬λλ€. μ΄λ₯Ό μ€ν 컨ν μ€νΈ μ€νμ΄λΌκ³ λΆλ₯Έλ€.λμκ³Όμ
- μ μ μ½λμ νκ°μ μ€ν
- ν¨μ μ½λμ νκ°μ μ€ν
- (μ€μ²©ν¨μ μμ κ²½μ°) μ€μ²©ν¨μμ νκ°μ μ€ν
- μ€μ²© ν¨μ μ’ λ₯ν ν¨μμ½λλ‘ λ³΅κ·
- ν¨μ μ½λ μ’ λ£ ν μ μ μ½λλ‘ λ³΅κ·
μ€ν 컨ν μ€νΈ μ€νμ μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬
μ€νμ μ΅μμμ μ‘΄μ¬νλ μ€ν 컨ν μ€νΈλ μΈμ λ νμ¬ μ€ν μ€μΈ μ½λμ μ€ν 컨ν μ€νΈ
λ μ컬 νκ²½
- λ μ컬 νκ²½μ μλ³μμ μλ³μμ λ°μΈλ©λ κ°, μμ μ€μ½νμ λν μ°Έμ‘°λ₯Ό κΈ°λ‘νλ μλ£κ΅¬μ‘°
- μ€μ½νμ μλ³μλ₯Ό κ΄λ¦¬
- μ 리 : μ€μ½νλ₯Ό ꡬλΆνμ¬ μλ³μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ μ₯μ μν
λ μ컬 νκ²½μ λ κ°μ μ»΄ν¬λνΈλ‘ ꡬμ±
- νκ²½ λ μ½λ(
Environment Record
)- νμ¬ μ€μ½νμ ν¬ν¨λ μλ³μλ₯Ό λ±λ‘νκ³ κ°μ κ΄λ¦¬νλ μ μ₯μ
- μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°(
Outer Lexical Environment Reference
)- μμ μ½λμ λ μ컬 νκ²½μ λ§ν¨, μ€μ²© ν¨μ λ μ¬λ¦¬λ©΄ μ½κ² μ΄ν΄ κ°λ₯, μΈλΆ λ μ컬 νκ²½ μ°Έμ‘°λ₯Ό ν΅ν΄ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈμΈ μ€μ½ν 체μΈμ ꡬν
μ€ν 컨ν μ€νΈμ μμ±κ³Ό μλ³μ κ²μ κ³Όμ
- μ μμ½λ νκ° μ΄μ μ μ μ κ°μ²΄κ° λ¨Όμ μμ± λ¨
μ μ μ½λ νκ° κ³Όμ
- μ 체 λμ μμ
- μ μ μ€ν 컨ν μ€νΈ μμ±
- μ μ λ μ컬 νκ²½ μμ±
2.1. μ μ νκ²½ λ μ½λ μμ±
2.1.1. κ°μ²΄ νκ²½ λ μ½λ μμ±
2.1.2. μ μΈμ νκ²½ λ μ½λ μμ±
2.2. this λ°μΈλ©
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
- μ μ μ½λ νκ° μ΄ν μ μ μ½λ μ€ν νκ³ ν¨μ μ½λ νκ°, μ€ν
νλ μ© μ΄ν΄λ³΄λ©΄
1. μ μ μ€ν 컨ν μ€νΈ μμ±
- λΉμ΄μλ μ€ν 컨ν μ€νΈ μ€νμ μ μ μ€ν 컨ν μ€νΈκ° μμ±
2. μ μ λ μ컬 νκ²½ μμ±
μ μ λ μ컬 νκ²½μ μμ±νκ³ μ μ μ€ν 컨ν μ€νΈμ λ°μΈλ© ν¨
λ μ컬 νκ²½μ 2κ°μ μ»΄ν¬λνΈλ‘ ꡬμ±(νκ²½ λ μ½λ, μΈλΆ λ μ컬 μ°Έμ‘°)
2.1. μ μ νκ²½ λ μ½λ μμ±
μ μ λ³μ κ΄λ¦¬ νλ μ μ μ€μ½ν , μ μ λΉνΈμΈ νλ‘νΌν°, ν¨μ, νμ€ λΉνΈμΈ κ°μ²΄ μ 곡
κ°μ²΄ νκ²½ λ μ½λμ μ μΈμ νκ²½ λ μ½λλ‘ κ΅¬μ±
2.1.1 κ°μ²΄ νκ²½ λ μ½λ μμ±
BindingObject
μ μ°κ²° (μ μ κ°μ²΄)var
ν€μλλ‘ μ μΈν μ μ λ³μμ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ μ μ ν¨μλ μ μ κ°μ²΄μ νλ‘νΌν°μ λ©μλκ° λλ€.2.1.2 μ μΈμ νκ²½λ μ½λ μμ±
let
,const
ν€μλλ‘ μ μΈν μ μ λ³μ(ν¨μ ννμ ν¬ν¨)λ μ μΈμ νκ²½ λ μ½λμ λ±λ‘λκ³ κ΄λ¦¬μ¬κΈ°μ λ°νμμ μ΄κΈ°ν λκΈ° μ κΉμ§ μΌμμ μ¬κ°μ§λ(
TDZ: Temporal Dead Zone
) μκΉ
2.2. this λ°μΈλ©
μ μ νκ²½ λ μ½λμ
[[GlobalThisValue]]
λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ©λ¨μ μ° μ½λμμ
this
λ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν΄- this λ°μΈλ©μ μ μ νκ²½ λ μ½λμ ν¨μ νκ²½ λ μ½λμ μ‘΄μ¬
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
νμ¬ νκ° μ€μΈ μμ€μ½λλ₯Ό ν¬ν¨νλ μΈλΆ μμ€ν¬λμ λ μ컬 νκ²½, μ¦ μμ μ€μ½νλ₯Ό κ°λ¦¬ν¨λ€.
μ΄λ₯Ό ν΅ν΄ μ€μ½ν μ²΄μΈ κ΅¬ν
μ μ μ½λλ μ΅μμ μ΄λ―λ‘ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ
null
3. μ μ μ½λ μ€ν
- λ³μ ν λΉ λ¬Έμ΄ μ€νλμ΄ κ°μ΄ ν λΉ, ν¨μλ₯Ό νΈμΆ
- μ΄λ λ³μ λ ν¨μμ μλ³μκ° μ μΈλ μλ³μμΈμ§ νμΈνλ κ³Όμ
- μ€μ½νμ λ°λΌ λμΌν μλ³μ μ‘΄μ¬ν μ λμλ€.
- μ¦, μ΄λ μ€μ½νμ μ€μ½νλ₯Ό μ°Έμ‘°ν μ§, μ μΈλ μλ³μμΈμ§ μλ³μ κ²°μ μ΄ νμ
- μλ³μ κ²°μ μ μν΄ νμ¬ μ€ν μ€μΈ μ€ν 컨ν μ€νΈμμ μλ³μ κ²μ μμ
- μ μΈλ μλ³μλ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ νκ²½ λ μ½λμ λ±λ‘ λμ΄ μλ€.
- νμ¬ μ€ν컨ν μ€νΈμμ μλ³μλ₯Ό μ°Ύμ μ μλ€λ©΄ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°κ° κ°λ¦¬ν€λ μμ μ€μ½νλ‘ μ΄λνμ¬ κ²μ (μ€μ½ν μ²΄μΈ λμ μ리)
ν¨μ μ½λ νκ° κ³Όμ
- μ 체 λμ μμ
- ν¨μ μ€ν 컨ν μ€νΈ μμ±
- ν¨μ λ μ컨 νκ²½ μμ±
- 2.1. ν¨μ νκ²½ λ μ½λ μμ±
- 2.2. this λ°μΈλ©
- μ μ μ½λ μ€ν νλ©΄μ ν¨μ νΈμΆ λ¬Έμ λ§λλ©΄ μ μ μ½λμ μ€νμ μ€λ¨νκ³ ν¨μ λ΄λΆ μ΄λ
νλμ© μ΄ν΄λ³΄μ
1. ν¨μ μ€ν 컨ν μ€νΈ μμ±
- ν¨μ μ€ν 컨ν μ€νΈλ μμ± ν ν¨μ λ μ컬 νκ²½μ΄ μμλλ©΄ μ€νμ νΈμλ¨
2. ν¨μ λ μ컬 νκ²½ μμ±
ν¨μ λ μ컬 νκ²½μ΄ μμ±λκ³ ν¨μ μ€ν 컨ν μ€νΈλ λ°μΈλ© λ¨
ν¨μ λ μ컬 νκ²½ μμ νκ²½ λ μ½λ μ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°λ‘ κ΅¬μ±
2.1. ν¨μ νκ²½ λ μ½λ μμ±
맀κ°λ³μ,
arguments
κ°μ²΄, ν¨μ λ΄λΆμ λ³μμ μ€μ²© ν¨μλ₯Ό λ±λ‘νκ³ κ΄λ¦¬μ΄λ 맀κ°λ³μλ
undefined
λ‘ μ묡μ μΌλ‘ μ΄κΈ°ν λ¨this λ°μΈλ©
ν¨μ νκ²½ λ μ½λμ
[[ ThisValue ]]
λ΄λΆ μ¬λ‘―μ thisκ° λ°μΈλ© λ¨μ΄λ thisλ ν¨μ νΈμΆ λ°©μμ λ°λΌ κ²°μ λ¨
2.3. μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° κ²°μ
ν¨μλ₯Ό μ΄λμ νΈμΆνλ μ§κ° μλλΌ μ΄λμ μ μ νλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ ν¨
μμ μ΄ μ μλ μ€μ½ν, μμ μμ μ€μ½νλ₯Ό μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μ 기리ν€κ² νλ€
μ μ ν¨μμ κ²½μ° λ μ컬 νκ²½μ΄ μμ± λΌμΌ μ€νμ νΈμ λ¨ -> μ¦ μ μ ν¨μ νκ° μμ μμ μ€ν μ€μΈ μ€ν 컨ν μ€νΈλ μ μ μ€ν 컨ν μ€νΈ
λ°λΌμ μ μν¨μλ μ μ λ μ컬 νκ²½μ μ°Έμ‘°κ° ν λΉ
μ€ν 컨ν μ€νΈμ λΈλ‘ λ 벨 μ€μ½ν
var
ν€μλλ‘ μ μΈν λ³μλ ν¨μ λ 벨 μ€μ½νλ§ λ°λ₯Έλ€.let
,const
λ‘ μ μΈν λ³μλ λͺ¨λ μ½λ λΈλ‘μ μ§μ μ€μ½νλ‘ μΈμ νλ λΈλ‘ λ 벨 μ€μ½νλ₯Ό λ°λ₯Έλ€.
let x = 1;
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // 1
if
λ¬Έ λ΄μμlet
ν€μλλ‘ λ³μ μ μΈ μif
λ¬Έμ μ½λ λΈλ‘μ μν λΈλ‘ λ 벨 μ€μ½νλ₯Ό μμ± ν΄μΌνλ€.- μ΄λ° κ²½μ° μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ΄ μλ‘ μμ±λ λΈλ‘ λ 벨 μ€μ½ν λ μ컬 νκ²½μ κ°λ¦¬ν€κ² λλ€.
- μμ±λ λΈλ‘ λ 벨μ λ μ컬 νκ²½μ μΈλΆ λ μ컬 μ°Έμ‘°λ‘ κΈ°μ‘΄μ μ μ λ μ컬 νκ²½μ κ°λ¦¬ν¨λ€.
if
λ¬Έμ΄ μ’ λ£λλ©΄ μ΄μ μ λ μ컬 νκ²½μΌλ‘ λ³΅κ· νλ€.
'javascript > π study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[5μ£Όμ°¨ μ€ν°λ]25μ₯-ν΄λμ€ (0) | 2022.03.27 |
---|---|
[5μ£Όμ°¨ μ€ν°λ]24μ₯-ν΄λ‘μ (0) | 2022.03.27 |
[4μ£Όμ°¨ μ€ν°λ] 22μ₯- this (0) | 2022.02.23 |
[4μ£Όμ°¨ μ€ν°λ] 21μ₯- λΉνΈμΈ κ°μ²΄ (0) | 2022.02.23 |
[4μ£Όμ°¨ μ€ν°λ] 20μ₯- strict mode (0) | 2022.02.23 |
λκΈ