|
| 1 | +μλ°μ€ν¬λ¦½νΈμ λμ μ리λ₯Ό λ΄μ ν΅μ¬ κ°λ
μΌλ‘, μ΄λ₯Ό λ°λ₯΄κ² μ΄ν΄νλ©΄ μμ λ°°μ΄ μλ°μ€ν¬λ¦½νΈ λμκ³Ό μμΌλ‘ λ°°μΈ λ΄μ©μ λͺ
νν μ μ μμ΅λλ€. |
| 2 | + |
| 3 | +## μμ€μ½λμ νμ
|
| 4 | +> ECMAScriptκ° μ μν 4κ°μ§ μμ€μ½λ νμ
μ
λλ€. μ΄λ€ μ½λλ **μ€ν 컨ν
μ€νΈλ₯Ό μμ±**ν©λλ€. |
| 5 | +
|
| 6 | +μ΄λ κ² κ΅¬λΆνλ μ΄μ λ μμ€μ½λμ νμ
μ λ°λΌ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νλ κ³Όμ κ³Ό κ΄λ¦¬ λ΄μ©μ΄ λ€λ₯΄κΈ° λλ¬Έμ
λλ€. |
| 7 | +1. μ μ μ½λ(μ μμ μ‘΄μ¬νλ μ½λ) |
| 8 | + - μ μ λ³μλ₯Ό κ΄λ¦¬νκΈ° μν μ΅μμ μ€μ½νμΈ μ μ μ€μ½νλ₯Ό μμ±ν©λλ€. |
| 9 | + - μ μ μ½λκ° νκ°λλ©΄ μ μ μ€ν 컨ν
μ€νΈκ° μμ±λ©λλ€. |
| 10 | +2. ν¨μ μ½λ(ν¨μ λ΄λΆμ μ‘΄μ¬νλ μ½λ) |
| 11 | + - μ§μ μ€μ½νλ₯Ό μμ±νκ³ μ§μ λ³μ, λ§€κ°λ³μ, arguments κ°μ²΄λ₯Ό κ΄λ¦¬ν©λλ€. |
| 12 | + - ν¨μ μ½λκ° νκ°λλ©΄ ν¨μ μ€ν 컨ν
μ€νΈκ° μμ±λ©λλ€. |
| 13 | +3. ~~eval μ½λ~~(μ¬μ©μ κΆμ₯νμ§ μμ΅λλ€) |
| 14 | + - strict modeμμ μμ λ§μ λ
μμ μΈ μ€μ½νλ₯Ό μμ±ν©λλ€. |
| 15 | + - eval μ½λκ° νκ°λλ©΄ eval μ€ν 컨ν
μ€νΈκ° μμ±λ©λλ€. |
| 16 | +4. λͺ¨λ μ½λ |
| 17 | + - λͺ¨λλ³λ‘ λ
립μ μΈ λͺ¨λ μ€μ½νλ₯Ό μμ±ν©λλ€. |
| 18 | + - λͺ¨λ μ½λκ° νκ°λλ©΄ λͺ¨λ μ€ν 컨ν
μ€νΈκ° μμ±λ©λλ€. |
| 19 | + |
| 20 | +μ΄λ κ² λκ³ λ³΄λ©΄, μ ν¬κ° μ νν μ μλ νμ
μ λλΆλΆ λ κ°μ§κ° λ©λλ€. λ°λ‘ μ μ μ½λμ ν¨μ μ½λμ£ . μ΄κ²μΌλ‘ μ€ν 컨ν
μ€νΈμ λν΄ μμ λ³Ό κ±°μμ. |
| 21 | + |
| 22 | +<br> |
| 23 | + |
| 24 | +## μμ€μ½λ νκ°μ μ€ν |
| 25 | +> μλ°μ€ν¬λ¦½νΈ μμ§μ **μμ€μ½λ νκ°**μ **μμ€μ½λ μ€ν** κ³Όμ μΌλ‘ λλμ΄ μ²λ¦¬ν©λλ€. |
| 26 | +
|
| 27 | +μμ€μ½λ νκ° κ³Όμ μ μ΄λ μ΅λλ€. |
| 28 | +1. μ€ν 컨ν
μ€νΈ μμ± |
| 29 | +2. λ³μ, ν¨μ λ±μ μ μΈλ¬Έλ§ λ¨Όμ μ€ν |
| 30 | +3. μμ±λ λ³μλ ν¨μ μλ³μλ₯Ό ν€λ‘ μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμ λ±λ‘ |
| 31 | + - μ¬κΈ°μμ μ€μ½νλ λ μ컬 νκ²½μ ν κ²½ λ μ½λλΌκ³ ν©λλ€. |
| 32 | + |
| 33 | +μμ€μ½λ νκ° κ³Όμ μ΄ μ’
λ£λλ©΄ μμ€μ½λκ° μ€νλλ, `λ°νμ`μ΄ μμλ©λλ€. |
| 34 | +1. μ μΈλ¬Έμ μ μΈν μμ€μ½λκ° μμ°¨μ μΌλ‘ μ€νλ©λλ€. |
| 35 | +2. μμ€μ½λ μ€νμ νμν μ λ³΄μΈ `λ³μ`λ `ν¨μ`μ μ°Έμ‘°λ₯Ό μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμμ κ²μν©λλ€. |
| 36 | + - λ³μ κ°μ λ³κ²½ λ± μμ€μ½λμ μ€ν κ²°κ³Όλ λ€μ μ€ν 컨ν
μ€νΈκ° κ΄λ¦¬νλ μ€μ½νμ λ±λ‘ν©λλ€. |
| 37 | + |
| 38 | +<br> |
| 39 | + |
| 40 | +## μ€ν 컨ν
μ€νΈμ μν |
| 41 | +> μ μ μ½λμ ν¨μ μ½λλ‘ μμ λ₯Ό μ΄ν΄λ΄
μλ€. |
| 42 | +
|
| 43 | +μλ°μ€ν¬λ¦½νΈ μμ§μ μ μ μ½λ νκ° - μ€ν, ν¨μ μ½λ νκ° - μ€νμ μμ°¨μ μΌλ‘ μ§νν©λλ€. |
| 44 | +1. μ μ μ½λ νκ° |
| 45 | + - μ μμ μ‘΄μ¬νλ λ³μμ ν¨μ μ μΈλ¬Έμ λ¨Όμ μ€ννμ¬ μ€ν 컨ν
μ€νΈμ **μ μ μ€μ½ν**μ λ±λ‘λ©λλ€. |
| 46 | + - var ν€μλλ‘ μ μΈν λ³μμ ν¨μ μ μΈλ¬Έμ κ²½μ° μ μ κ°μ²΄μ νλ‘νΌν°κ° λ©λλ€. |
| 47 | + - let, const ν€μλλ‘ μ μΈν λ³μλ 보μ΄μ§ μλ κ°λ
μ λΈλ‘μ μ‘΄μ¬ν©λλ€. |
| 48 | + |
| 49 | +2. μ μ μ½λ μ€ν |
| 50 | + - λ°νμμ΄ μμλ©λλ€. μ μ λ³μμ κ°μ΄ ν λΉλκ³ ν¨μκ° νΈμΆλ©λλ€. |
| 51 | + - ν¨μκ° νΈμΆλλ©΄ μ μ μ½λ μ€νμ΄ μΌμ μ€λ¨λκ³ ν¨μ λ΄λΆλ‘ μ§μ
νμ¬ μ½λλ₯Ό μ€νν©λλ€. |
| 52 | + |
| 53 | +3. ν¨μ μ½λ νκ° |
| 54 | + - ν¨μμ λ§€κ°λ³μμ μ§μ λ³μ μ μΈλ¬Έμ λ¨Όμ μ€ννκ³ μ€ν 컨ν
μ€νΈμ **μ§μ μ€μ½ν**μ λ±λ‘λ©λλ€. |
| 55 | + - ν¨μ λ΄λΆμμ μ§μ λ³μμ²λΌ μ¬μ© κ°λ₯ν **arguments κ°μ²΄κ° μμ±λμ΄ μ§μ μ€μ½νμ λ±λ‘**λκ³ **this λ°μΈλ©λ κ²°μ **λ©λλ€. |
| 56 | + |
| 57 | +4. ν¨μ μ½λ μ€ν |
| 58 | + - λ°νμμ΄λ―λ‘ λ§€κ°λ³μμ μ§μ λ³μμ κ°μ΄ ν λΉλ©λλ€. |
| 59 | + - ν¨μ νΈμΆ μ½λκ° μ‘΄μ¬νλ€λ©΄ ν¨μλ₯Ό νΈμΆν μλ³μλ₯Ό μ€μ½ν 체μΈμ ν΅ν΄ κ²μν©λλ€. |
| 60 | + - μ μ μ€μ½νκΉμ§ νμνλ μ μ μ€μ½νμ ν΄λΉ ν¨μκ° μ‘΄μ¬νμ§ μλ€λ©΄ μ μ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ μ μ€μ½νμ²λΌ κ²μν©λλ€. |
| 61 | + - νΈμΆν ν¨μ λ©μλλ₯Ό μλ³μ κ°μ²΄μ νλ‘ν νμ
체μΈμ ν΅ν΄ κ²μν©λλ€. |
| 62 | + - μΈμκ° μ‘΄μ¬νλ€λ©΄ μΈμλ₯Ό μ λ¬ν ννμμ νκ°νκ³ , κ° μλ³μλ₯Ό μ€μ½ν 체μΈμ ν΅ν΄ κ²μν©λλ€. |
| 63 | + - ν¨μ μ€νμ΄ μ’
λ£λλ©΄ ν¨μ νΈμΆ μ΄μ μΌλ‘ λμκ° μ μ μ½λ μ€νμ κ³μν©λλ€. |
| 64 | + |
| 65 | +μ΄μ²λΌ μ½λκ° μ€νλλ €λ©΄ μ€μ½νλ₯Ό ꡬλΆν΄ μλ³μμ λ°μΈλ©λ κ°μ΄ κ΄λ¦¬λμ΄μΌ νλ©°, μ€μ²© κ΄κ³μ μν΄ μ€μ½ν 체μΈμ νμ±νκ³ μλ³μλ₯Ό κ²μν μ μμ΄μΌ ν©λλ€. λν μ μ κ°μ²΄μ νλ‘νΌν°λ μ μ λ³μμ²λΌ κ²μν μ μμ΄μΌ νμ£ . |
| 66 | + |
| 67 | +ν¨μ νΈμΆμ΄ μ’
λ£λλ©΄ ν¨μ νΈμΆ μ΄μ μΌλ‘ λμκ°λ―λ‘ `νμ¬ μ€ν μ€μΈ μ½λ`μ `μ΄μ μ μ€ννλ μ½λ`λ₯Ό ꡬλΆνμ¬ κ΄λ¦¬ν΄μΌ ν©λλ€. μ¦ μλμ κ°μ μ‘°κ±΄μ΄ μκΈ°μ£ . |
| 68 | +1. μ μΈμ μν΄ μμ±λ `λͺ¨λ μλ³μ(λ³μ, ν¨μ, ν΄λμ€ λ±)`λ₯Ό μ€μ½νλ₯Ό ꡬλΆνμ¬ λ±λ‘νκ³ `μν λ³ν(μλ³μμ λ°μΈλ© λ κ°μ λ³ν)λ₯Ό μ§μμ μΌλ‘ κ΄λ¦¬`ν μ μμ΄μΌ ν©λλ€. |
| 69 | +2. μ€μ½νλ μ€μ²© κ΄κ³μ μν΄ `μ€μ½ν 체μΈμ νμ±`ν΄μΌ νλ©°, μ€μ½ν 체μΈμ ν΅ν΄ μμ μ€μ½νλ‘ μ΄λνλ©° μλ³μλ₯Ό κ²μν μ μμ΄μΌ ν©λλ€. |
| 70 | +3. νμ¬ μ€ν μ€μΈ μ½λμ μ€ν μμλ₯Ό `λ³κ²½(ν¨μ νΈμΆμ μν μ€ν μμ λ³κ²½ λ±)`ν μ μμ΄μΌ νλ©°, `λλμ` κ° μλ μμ΄μΌ ν©λλ€. |
| 71 | + |
| 72 | +μ΄ λͺ¨λ κ²μ κ΄λ¦¬νλ κ² μ€ν 컨ν
μ€νΈλ‘ μμ€μ½λλ₯Ό μ€ννλλ° νμν νκ²½μ μ 곡νκ³ μ½λμ μ€ν κ²°κ³Όλ₯Ό μ€μ λ‘ κ΄λ¦¬νλ μμμ
λλ€. μ¦, **μλ³μ(λ³μ, ν¨μ, ν΄λμ€ λ±)λ₯Ό λ±λ‘νκ³ κ΄λ¦¬νλ μ€μ½νμ μ½λ μ€ν μμ κ΄λ¦¬λ₯Ό ꡬνν λ΄λΆ λ©μ»€λμ¦μ΄λ©°, λͺ¨λ μ½λλ μ€ν 컨ν
μ€νΈλ₯Ό ν΅ν΄ μ€νλ©λλ€**. μλ³μμ μ€μ½νλ μ€ν 컨ν
μ€νΈμ **λ μ컬 νκ²½(Lexical Enviroment)** μΌλ‘ κ΄λ¦¬νκ³ , μ½λ μ€ν μμλ **μ€ν 컨ν
μ€νΈ μ€ν**μΌλ‘ κ΄λ¦¬ν©λλ€. |
| 73 | + |
| 74 | +μλ μ½λλ‘ μ€ν 컨νμ€νΈ μ€νμ λν΄ μμΈν μμλ΄
μλ€. |
| 75 | + |
| 76 | +<br> |
| 77 | + |
| 78 | +## μ€ν 컨ν
μ€νΈ μ€ν |
| 79 | +> μλ°μ€ν¬λ¦½νΈ μμ§μ μ€ν 컨ν
μ€νΈλ₯Ό **μ€ν(Stack) μλ£κ΅¬μ‘°**λ‘ κ΄λ¦¬νλ©°, μ΄λ₯Ό μ€ν 컨ν
μ€νΈ μ€νμ΄λΌκ³ ν©λλ€. |
| 80 | +
|
| 81 | +μ½λμ ν¨κ» μμν©λλ€. |
| 82 | + |
| 83 | +```js |
| 84 | +// 1. μ μ μ½λ : μ μ λ³μ μ μΈ |
| 85 | +const x = 1; |
| 86 | +const y = 2; |
| 87 | + |
| 88 | +// μ μ μ½λ : ν¨μ μ μ |
| 89 | +function out(){ |
| 90 | + // 2. ν¨μ μ½λ : μ§μ λ³μ μ μΈ |
| 91 | + const x = 10; |
| 92 | + |
| 93 | + function in(){ |
| 94 | + const y = 20; |
| 95 | + console.log(x + y); |
| 96 | + } |
| 97 | + in(); |
| 98 | +} |
| 99 | + |
| 100 | +out(); |
| 101 | +``` |
| 102 | + |
| 103 | +μ μ½λλ₯Ό μ€ννλ©΄ μμ°¨μ μΌλ‘ μ€ν 컨ν
μ€νΈ μ€νκ° μΆκ°(push)λκ±°λ μ κ±°(pop)λ©λλ€. λμννλ©΄ μλμ κ°μμ. |
| 104 | + |
| 105 | +<br> |
| 106 | + |
| 107 | +<div align='center'> |
| 108 | + |
| 109 | +<img src='./img/execution_context/execution_context_stack.jpg' width='600'/> |
| 110 | + |
| 111 | +<br> |
| 112 | + |
| 113 | + <div align="left"> |
| 114 | + <ul style="list-style:none;"> |
| 115 | + <li> |
| 116 | + 1. μ μ λ³μ xμ y, ν¨μ outμ μ μ μ€ν 컨ν
μ€νΈμ λ±λ‘(push)λκ³ , λ°νμμ΄ μμλλ©΄ μ μ λ³μμ κ°μ΄ ν λΉλκ³ outμ΄ νΈμΆλ©λλ€. |
| 117 | + </li> |
| 118 | + <br> |
| 119 | + <li> |
| 120 | + 2. ν¨μ outμ΄ νΈμΆλμ΄ μ½λ μ μ΄κΆ(Control)μ΄ out ν¨μ λ΄λΆλ‘ μ΄λν λ€ out ν¨μ λ΄λΆμ ν¨μ μ½λλ₯Ό νκ°νμ¬ out ν¨μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νκ³ μ€νμ μΆκ°(push)ν©λλ€. μ΄ λ μ§μ λ³μ xμ λ΄λΆ ν¨μ inμ΄ out ν¨μ μ€ν 컨ν
μ€νΈμ λ±λ‘λκ³ , λ°νμμ΄λ―λ‘ μ§μ λ³μμ κ°μ΄ ν λΉλκ³ λ΄λΆ ν¨μ inμ΄ νΈμΆλ©λλ€. |
| 121 | + </li> |
| 122 | + <br> |
| 123 | + <li> |
| 124 | + 3. ν¨μ inμ΄ νΈμΆλμ΄ μ½λ μ μ΄κΆμ΄ in ν¨μ λ΄λΆλ‘ μ΄λν λ€, in ν¨μ λ΄λΆμ ν¨μ μ½λλ₯Ό νκ°νμ¬ in ν¨μ μ€ν 컨ν
μ€νΈλ₯Ό μμ±νκ³ μ€νμ μΆκ°(push)ν©λλ€. μ΄ λ μ§μ λ³μ yκ° in ν¨μ μ€ν 컨ν
μ€νΈμ λ±λ‘λκ³ , λ°νμμ΄λ―λ‘ yμ κ°μ ν λΉν λ€ console.log λ©μλλ₯Ό νΈμΆνκ³ μ’
λ£λ©λλ€. |
| 125 | + </li> |
| 126 | + <br> |
| 127 | + <li> |
| 128 | + 1. in ν¨μκ° μ’
λ£λμμΌλ―λ‘ μ½λ μ μ΄κΆμ΄ λ€μ out ν¨μλ‘ μ΄λν©λλ€. in ν¨μκ° μ’
λ£λμμΌλ―λ‘ μ€νμμ μ κ±°(pop)λ©λλ€. κ·Έλ¦¬κ³ in ν¨μλ λ μ΄μ μ€νν μ½λκ° μμΌλ―λ‘ μ’
λ£λ©λλ€. |
| 129 | + </li> |
| 130 | + <br> |
| 131 | + <li> |
| 132 | + 1. foo ν¨μκ° μ’
λ£λμμΌλ―λ‘ μ½λ μ μ΄κΆμ λ€μ μ μ μ½λλ‘ μ΄λν©λλ€. out ν¨μκ° μ’
λ£λμμΌλ―λ‘ μ€νμμ μ κ±°(pop)λ©λλ€. κ·Έλ¦¬κ³ μ μ μ½λλ λ μ΄μ μ€νν μ½λκ° μμΌλ―λ‘ μ’
λ£λλ©° μ€ν 컨ν
μ€νΈμμ μ κ±°(pop)λ©λλ€. |
| 133 | + </li> |
| 134 | + </ul> |
| 135 | + </div> |
| 136 | + |
| 137 | +</div> |
| 138 | + |
| 139 | +<br> |
| 140 | + |
| 141 | +μ΄μ²λΌ μ€ν 컨ν
μ€νΈ μ€νμ μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬νμ£ . μμ€μ½λκ° νκ°λλ©΄ μ€ν 컨ν
μ€νΈκ° μμ±λκ³ μ€ν 컨ν
μ€νΈ μ€νμ μ΅μμμ μμ
λλ€. μ¦, **μ€ν 컨ν
μ€νΈ μ€νμ μ΅μμμ μ‘΄μ¬νλ μ€ν 컨ν
μ€νΈλ μΈμ λ νμ¬ μ€ν μ€μΈ μ½λμ μ€ν 컨ν
μ€νΈ**μ
λλ€. μ΄λ₯Ό μ€ν μ€μΈ `μ€ν 컨ν
μ€νΈ(Running Execution Context)`λΌκ³ ν©λλ€. |
| 142 | + |
| 143 | +<br> |
| 144 | + |
| 145 | +## λ μ컬 νκ²½(Lexical Enviroment) |
| 146 | +> μλ³μμ μλ³μμ λ°μΈλ© λ κ°, μμ μ€μ½νμ λν μ°Έμ‘°λ₯Ό κΈ°λ‘νλ μλ£κ΅¬μ‘°λ‘ μ€ν 컨ν
μ€νΈλ₯Ό ꡬμ±νλ μ»΄ν¬λνΈμ
λλ€. |
| 147 | +
|
| 148 | +`μ€ν 컨ν
μ€νΈ μ€ν`μ΄ **μ½λμ μ€ν μμλ₯Ό κ΄λ¦¬**νλ€λ©΄ `λ μ컬 νκ²½`μ **μ€μ½νμ μλ³μλ₯Ό κ΄λ¦¬**ν©λλ€. |
0 commit comments