μ€ν 컨ν μ€νΈλ₯Ό μμ보μ!
μ€ν 컨ν μ€νΈλ₯Ό μν΄ μ± μ μ½λ λλ λ€... κ·Έλ¬λ ν μ€νΈλ§μΌλ‘λ μ½κ² μ΄ν΄ν μ μμλ λ..
νμ§λ§ μ΄λλ‘ λμ΄κ° μ μμ§.. π€
μ΄λ² κΈ°νμ μλ°μ€ν¬λ¦½νΈλ₯Όμ λμ μ리λ₯Ό λ³΄λ€ κΉκ² μ΄ν΄νκΈ° μν΄ μ€ν 컨ν μ€νΈμ λν΄ μ 리ν΄λ³΄μ!
μ€ν 컨ν μ€νΈλ₯Ό μκΈ° μν΄μλ λ¨Όμ μ½ μ€νμ λν΄μ μμμΌ νλ€.
μ½ μ€ν
μ°μ μ€νμ μμ κ°μ΄ νλνλ μ°¨λ‘λλ‘ μκ³ λΉΌκ³ λ₯Ό λ°λ³΅νλ μλ£κ΅¬μ‘°λ€.
μ½ μ€νμ κ°μ₯ μμ μμ¬μλ 컨ν
μ€νΈμ κ΄λ ¨λ μ½λλ₯Ό μ€ννμ¬ μ½λμ μ€ν μμμ νκ²½μ κ΄λ¦¬νλ€.
νμ¬ μ€νμ€μΈ μ½λμ μ€ν 컨ν
μ€νΈκ° μ½ μ€νμ μ΅μμμ μ‘΄μ¬νλ€! μ΄λ° μ½ν
μ€νΈλ₯Ό μ€ν μ€μΈ μ€ν 컨ν
μ€νΈ (running execution context)λΌκ³ νλ€.
κ·ΈλΌ μ»¨ν μ€νΈκ° λκΈΈλ μ½ μ€νμ μλμ.. π€
μ€ν 컨ν μ€νΈ
μ€ν 컨ν
μ€νΈλ μ€νν μ½λμ νμν νκ²½ μ 보λ€μ λͺ¨μλμ κ°μ²΄λ€.
컨ν
μ€νΈλ ν¬κ² 3κ°μ§μ νμ
μ΄ μλ€. μ΄ νμ
λ€μ κ°κ°μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νλ€.
- μ μ μ½λ : μ μμ μ‘΄μ¬νλ μμ€μ½λ (μ μμ μ μΈλ ν¨μ, ν΄λμ€λ λ―Έν¬ν¨) μ€ν¬λ¦½νΈκ° μ€νλ λ μλμΌλ‘ λΆμ¬λλ€.
- ν¨μ μ½λ(κ°μ₯ ννκ² μ€ν 컨ν μ€νΈλ₯Ό ꡬμ±νλ λ°©λ²) : ν¨μκ° νΈμΆλ λ 컨ν μ€νΈκ° μμ±λμ΄ μ½ μ€νμ μμΈλ€. (ν¨μ λ΄λΆμ μ€μ²©λ ν¨μ, ν΄λμ€λ λ―Έν¬ν¨)
- eval() μ½λ : eval ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ€νλλ μμ€μ½λ.
- λͺ¨λ μ½λ : λͺ¨λ λ΄λΆμ μ‘΄μ¬νλ μμ€μ½λ. (λͺ¨λ λ΄λΆμ ν¨μ, ν΄λμ€λ λ―Έν¬ν¨)
μμ μ½λλ₯Ό ν΅ν΄μ μ’ λ ꡬ체μ μΌλ‘ μ€ν 컨ν μ€νΈκ° μ΄λ»κ² ꡬμ±λλμ§ λ³΄λ©΄ μ΄λ λ€.
var a = 1;
function outer(){
function inner(){
console.log(a); // undefined
var = 3;
}
inner();
console.log(a);
}
outer();
conosle.log(a);
1. μ½λ μ€ν
2. μ μ컨ν
μ€νΈκ° μ½μ€νμΌλ‘ in
3. outer ν¨μ μ€ν 컨ν
μ€νΈκ° λ€μ΄μ€λ©΄μ μ μ 컨ν
μ€νΈκ° μ€λ¨λ¨
4. inner ν¨μ μ€ν 컨ν
μ€νΈκ° λ€μ΄μ€κ³ outer 컨ν
μ€νΈ μ€λ¨
5. inner ν¨μμ λ΄λΆ μ§ν
6. inner 컨ν
μ€νΈ λ
7. outer 컨ν
μ€νΈ μ¬κ°
8. outer 컨ν
μ€νΈ λ
9. μ μ 컨ν
μ€νΈ μ¬κ°
10. μ μ컨ν
μ€νΈ λ
11. μ½λ μ’
λ£
μ€ν 컨ν μ€νΈμ λ΄κΈ°λ μ 보
μ€ν 컨ν μ€νΈμλ μλμ κ°μ΄ μΈ κ°μ§μ μ λ³΄κ° λ΄κΈ΄λ€.
VariableEnvironment
a. νμ¬ μ»¨ν μ€νΈ λ΄μ μλ³μ μ 보 (νΈμ΄μ€ν μ μ¬μ©λ¨)
b. μΈλΆ νκ²½ μ 보
c. μ μΈ μμ μ λ μ컬 νκ²½ μ€λ μ·
LexicalEnvironment
VEμ μ μΈ μμ μ€λ μ·μ 볡μ¬νμ¬ μμ±! μ€λ μ·μ΄ μ μ§λμ§ μκ³ λ³κ²½μ¬νμ΄ μ€μκ°μΌλ‘ λ°μλλ€.
this binding
this μλ³μκ° λ°λΌλ΄μΌ ν κ°μ²΄κ° λ€μ΄μλ€.
VEμ LEμ ꡬμ±μμ
λ λ€ λμΌνκ² environmentRecord (μ€μ¬μ record) outerEnvironment (μ€μ¬μ outer)λ‘ κ΅¬μ±λμ΄ μλ€.
environmentRecord(= record)
νμ¬ μ»¨ν μ€νΈμ κ΄λ ¨λ μλ³μ μ 보λ€μ μμ§νλ€.
- ν¨μμ μλ³λ 맀κ°λ³μ μλ³μ, ν¨μ μ체, varλ‘ μ μΈλ λ³μ μλ³μ λ±λ±
- 컨ν μ€νΈ λ΄λΆλ₯Ό μ²μ-> λ μμλλ‘ νμ΄μ μμ§νλ€.
- μ΄λ κ² μμ§λ μ 보λ€μ νΈμ΄μ€ν
μ μ¬μ©λλ€.
λ³μμ νΈμ΄μ€ν κ³Ό κ΄λ ¨ν΄μλ μλ ν¬μ€ν μλ μ 리νλ€.
https://i-ten.tistory.com/149
ν¨μμ νΈμ΄μ€ν κ΄λ ¨ν΄μλ ν¨μ ννμμ λ³μ λΆλΆμ΄, ν¨μ μ μΈλ¬Έμ κ·Έ μμ²΄λ‘ νΈμ΄μ€ν λλ€λ νΉμ§μ΄ μλ€!
outerEnvironment(= outer)
outerλ μ μΈλ λΉμμ λ μ컬 νκ²½μ μ°Έμ‘°ν΄μ μ€μ½ν 체μΈμ΄ κ°λ₯ν λ‘ νλ€.
μ€μ½ν 체μΈ?
μ€μ½ν 체μΈμ μλ³μμ μ ν¨ λ²μλ₯Ό μμμλΆν° λ°κΉ₯μΌλ‘ κ²μν΄λκ°λ κ²!..
var a = 1;
var outer = function(){
var inner = function(){
console.log(a);
var a = 3;
};
inner();
console.log(a);
};
outer();
console.log(a);
μμ κ°μ μ½λκ° μλ€κ³ ν λ, μ΄ μ½λμ κ²°κ³Όλ μλμ κ°λ€.
첫 λ²μ§Έ λ‘κ·Έλ μ undefinedμΈκ°μ?..
inner ν¨μ μμμ νΈμ΄μ€ν μ μν΄ μ΄λ κ² μ§νλκΈ° λλ¬Έμ΄λ€.
λ³μ aλ μ μΈλκΈ°λ§ νκ³ κ° ν λΉμ μμ§ λ°μ§ λͺ»νκΈ° λλ¬Έμ undefinedκ° λμ¨λ€.
νμ§λ§ aμ κ°μ inner ν¨μ μ€μ½ν μμμ μ°Ύμ μν.
κ·ΈλΌ λ λ²μ§Έμ μΈ λ²μ§Έ μ½μμ μ 1μΈκ°μ.. νλ€λ©΄ inner ν¨μμ νΈμΆμ΄ λλ μνμ΄κΈ° λλ¬Έμ μ½ μ€νμλ μ΄λ κ² λ¨λλ€.
outer ν¨μ λ΄λΆμ λ³μ aκ° μκΈ° λλ¬Έμ μ€μ½ν 체μΈμ ν΅ν΄ μ μ 컨ν μ€νΈμ λ μ컬 νκ²½μμ μ°Ύμμ¨ κ²!
μ΄λ° μμΌλ‘ νΈμΆλ μ€μ½ν μμμ κ°μ μ°Ύμ§ λͺ»νμ λ λ°κΉ₯ μ€μ½νλ‘ κ±°μ¬λ¬ μ¬λΌκ°λ©° κ°μ μ°Ύλ κ²μ΄ μ€μ½ν 체μΈμ΄λ€!
'π Studying > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] νΈμ΄μ€ν Hoistingκ³Ό TDZ (0) | 2023.03.28 |
---|---|
[Javascript] λ λ³ν©μ°μ°μ '??'μ μ΅μ λ 체μ΄λ '?.' (1) | 2022.12.01 |
[Javascript] μ°Έμ‘°ν λ°μ΄ν°μ λ©λͺ¨λ¦¬ ν λΉκ³Ό μμ 볡μ¬, κΉμ λ³΅μ¬ (0) | 2022.11.29 |
[JavaScript] μΆμ² κ²μμ΄ λμ°κΈ° (0) | 2022.08.11 |
[JavaScript] ν΄λ‘μ μ΄μ§ μμ보기 (0) | 2022.08.11 |
Comment