μΆμ² : [10λΆ ν ν¬ν‘] κΌ¬μ¬μ ν΄λ‘μ
function sum(x){
return function (y) {
return x+y;
};
}
const add = sum(1);
console.log(add(2));
ν΄λ‘μ μ λμ λ°©μμ μ΄ν΄νκΈ° μν΄ μ¬μ©ν μ€ν 컨ν μ€νΈ
Lexical Environment - Lexical Environment Record
γ΄ Outer Environment Reference
μ½λ νκ° μ§ν ( Global )
1-1. Global μ Lexical Environment μμ± ν μ μμ½λ νκ°
1-2. Lexical Environment Record μ add λ³μμ sum ν¨μ νΈμ΄μ€ν
1-3. call μ€νμ Global Lexical Environment νΈμ¬
add λ³μμ ν λΉλ sum ν¨μ μ€ν
2-1. sum ν¨μ μ Lexical Environment μμ± ν μ μμ½λ νκ°
2-2. Lexical Environment Record μ sum ν¨μμ λ§€κ°λ³μ x μ return λ¬Έμ μ΅λͺ ν¨μ νΈμ΄μ€ν
2-3. Outer Environment Reference μλ μμ μ€μ½νμΈ Global Lexical Environment λ₯Ό κ°λ¦¬ν΄
2-4. Call μ€νμ sum Lexical Environment νΈμ¬
2-5. μ½λ νκ° μ’ λ£ν, λ§€κ°λ³μ x μ ν λΉλ κ°μΈ 1μ Lexical Environment Record μ μ μ₯
2-6. λμ΄μ μ€νν μ½λ μκΈ° λλ¬Έμ call stack μμ pop
λ€μ Global Lexical Environment λ‘ λμμ¨ν, add ν¨μμ sumν¨μμ 리ν΄κ°μΈ μ΅λͺ ν¨μ ν λΉ
3-1. Global Lexical Environment Record μ μ΅λͺ ν¨μ ν λΉ
λ§μ§λ§ μ½λμΈ console.log λ₯Ό ν΄κ²°νκΈ° μν΄, add ν¨μ νΈμΆ
4-1. add Lexical Environment μμ± ν μ½λνκ°
4-2. λ§€κ°λ³μ y λ₯Ό νΈμ΄μ€ν νμ¬ add Lexical Environment Record μ μ μ₯
4-3. Outer Environment Reference μλ μμ μ€μ½νμΈ sum Lexical Environment λ₯Ό κ°λ¦¬ν΄
β μ΄λ, ν΄λ‘μ νμμ΄ λνλ©λλ€! λΆλͺ sum μ pop λμ΄μλ κ²μΌλ‘ μκ³ μμ΄ κ°λ¦¬ν¬μ μλκ²μΌλ‘ 보μΈλ€. κ·Έλ¬λ μ΄κΈ°μ μ½λ νκ°λ₯Ό ν λ, μ΅λͺ ν¨μμ μ μΈκ³Ό λμμ Outer Environment Reference μ λ¨Όμ sum μ Lexical Environmentd μ μ₯νμκΈ° λλ¬Έμ κ°λ¦¬ν¬μμλ€.
4-4. Call μ€νμ add Lexical Environment νΈμ¬ ν μ½λνκ° μ’ λ£
4-5. μ½λ νμ€μ© μ€ν νμ¬, y λ§€κ°λ³μμ 2λ₯Ό ν λΉ
4-6. λ€μμΌλ‘ return λ¬ΈμΈ x+y μ€ν
4-7. xμ λ§€κ°λ³μκ° Lexical Environment Record μ 보μ΄μ§μκΈ° λλ¬Έμ Outer Environment Reference μ Lexical Environment Record λ₯Ό μ°Ύμ λμ λ€.
4-8. μ‘΄μ¬νμ§ μλ λ€λ©΄ 4-7 κ³Όμ μ λ°λ³΅νμ¬ Global Lexical Environment κΉμ§ νμνλ€. ( λ§μ½ Global Lexical Environment μλ μ‘΄μ¬νμ§ μλ λ€λ©΄ reference μλ¬κ° λ°μνλ€.)
4-9. sum Lexical Environment μ ν λΉν x κ°μ΄ μ‘΄μ¬νκΈ° λλ¬Έμ κ·Έ κ°μ νμΈν λ³Έλμ κ°μΌλ‘ λμκ°λλ€.
4-10. κ³μ°λ κ° ( 1 + 2 ) μΈ 3μ κ°μ΄ 리ν΄λ©λλ€.
4-11. λμ΄μ μ€νν μ½λ μκΈ° λλ¬Έμ call stack μμ add Lexical Environment λ₯Ό pop
4-12. Global Lexical Environment μμ λ§μ§λ§μΌλ‘ λ¨μ console.log(3)μ μΆλ ₯νλ€.
4-13. Global Lexical Environment λ call stack μμ pop λλ©΄μ νλ‘κ·Έλ¨ μ’ λ£