"ν΄λ‘μ κ° λμμ?" λ₯Ό λ΅νμ§ λͺ»νλ€.
ν΄λ‘μ κ° λμμ?
μ΄λ€ ν¨μμμ μ μΈν λ³μλ₯Ό μ°Έμ‘°νλ λ΄λΆ ν¨μλ₯Ό μΈλΆλ‘ μ λ¬ν κ²½μ° ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ νμλ ν΄λΉ λ³μκ° μ¬λΌμ§μ§ μλνμμ λ§ν©λλ€.
ν΄λ‘μ
μ΄λ€ ν¨μμμ μ μΈν λ³μλ₯Ό μ°Έμ‘°νλ λ΄λΆ ν¨μλ₯Ό μΈλΆλ‘ μ λ¬ν κ²½μ°,
(μΈλΆ)ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ νμλ ν΄λΉ λ³μκ° μ¬λΌμ§μ§ μλ νμ
var outer = function () {
var a= 1;
var inner= function() {
return ++a;
}
return inner; // - 1. κ°μ΄ μλ ν¨μ μ체λ₯Ό μ λ¬
}
var outer2 = outer(); // - 2. fooν¨μμ μ€ν컨ν
μ€νΈ μ’
λ£
console.log(outer2()); // 2 - 3. μμ λ°ν λ innerκ° μ€νλ¨
console.log(outer2()); // 3
- fooλ ν¨μμ μ€ν κ²°κ³Όκ° μλ ν¨μ μ체λ₯Ό λ°νν¨ (inner)
- fooν¨μμ μ€ν컨ν μ€νΈκ° μ’ λ£λμμμλ
- μμ λ°νλ innerν¨μκ° μ€νλ¨
κ·Έ μ΄μ λ?
innerν¨μλ λ΄λΆμμ μ μΈλμμ : outerν¨μμλ μ컬 νκ²½μ λ΄κΉ
μ€μ½ν 체μ΄λμ λ°λΌ outerμμ μ μΈν λ³μ aμ μ κ·Όνκ² λ¨
κ·Όλ° μ΄λ»κ² μ κ·Όνλ κ±°μμ?
κ°λΉμ§ 컬λ ν°μ λμ λ°©μ λλ¬Έμ λλ€.
κ°λΉμ§ 컬λ ν°λ μ΄λ€ κ°μ μ°Έμ‘°νλ λ³μκ° νλλΌλ μμΌλ©΄ κ·Έ κ°μ μμ§ λμμ ν¬ν¨νμ§ μμ
λ°λΌμ outer ν¨μμ μ€νμ΄ μ’ λ£λλλΌλ λ΄λΆ ν¨μμΈ inner λ‘ μΈν΄ aλ₯Ό νΈμΆν κ°λ₯μ±μ΄ μκ³
κ°λΉμ§ 컬λ ν°λ μ΄ κ°μ μμ§νμ§ μλλ€
ν΄λ‘μ μ λ€μν μ μ
ν¨μμμ μ μΈν λ³μλ₯Ό λ΄λΆ ν¨μμμ μ¬μ©ν κ²½μ° λ°μνλ νμμΌλ‘,
μΈλΆ ν¨μμ μλͺ μ£ΌκΈ°κ° μ’ λ£λλλΌλ, μ€μ½ν 체μΈμ μν΄ ν΄λΉ λ³μλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
ν¨μλ₯Ό μ μΈν λ λ§λ€μ΄μ§λ μ ν¨λ²μκ° μ¬λΌμ§ νμλ νΈμΆν μ μλ ν¨μ - < μλ°μ€ν¬λ¦½νΈ λμ λΉκΈ> , μ‘΄λ μ
μ΄λ―Έ μλͺ μ£ΌκΈ°κ° λλ μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°νλ ν¨μ - < μΈμ¬μ΄λ μλ°μ€ν¬λ¦½νΈ >, μ‘νμ£Ό κ³ νμ€
μμ μ΄ μμ±λ λμ μ€μ½νμμ μ μ μμλ λ³μλ€ μ€ μΈμ κ° μμ μ΄ μ€νλ λ μ¬μ©ν λ³μλ§μ κΈ°μ΅νμ¬ μ μ§μν€λ ν¨μ - < ν¨μν μλ°μ€ν¬λ¦½νΈ νλ‘κ·Έλλ° >, μ μΈλ
- ν΄λΉ λ΄μ©μ μ½μ΄ μλ°μ€ν¬λ¦½νΈ λ΄μ©μ μ°Έμ‘°νμ΅λλ€. -