π ν΄λ‘μ μ λν΄ μμλ΄ μλ€.
μμ°μ€μ μ¬μ©νμ ν΄λ‘μ . μ λλ‘ μ 리ν΄λ΄ μλ€.
μλ°μ€ν¬λ¦½νΈμμλ λ΄λΆν¨μμ μΈλΆν¨μκ° μ‘΄μ¬ν©λλ€. λ΄λΆν¨μλ μΈλΆν¨μμ μ§μλ³μμ μ κ·Όν μ μμ΅λλ€.
κ·Έλ¦¬κ³ μΈλΆν¨μκ° μλ©Έν νμλ μΈλΆν¨μμ μ§μλ³μμ μ κ·Ό κ°λ₯ν©λλ€.
μ΄ νΉμ±μ μ΄μ©ν κ²μ΄ closure μ λλ€.
λ§λ‘λ μ λΆ μ΄ν΄νκΈ° νλ€μ£ ? π
κ·ΈλΌ μμλ₯Ό λ³΄κ² μ΅λλ€.
function outer(outerValue) {
return function inner(innerValue) {
console.log(`outer value : ${outerValue}`);
console.log(`inner value : ${innerValue}`);
}
}
const inner = outer("κ²μ λ°μ");
inner("μμ μ΄μ΄");
// outer value : κ²μ λ°μ
// inner value : μμ μ΄μ΄
κ²°κ³Όλ ?
outer value : κ²μ λ°μ
inner value : μμ μ΄μ΄
μΈλΆ ν¨μμμ μ μΈλ outerValue
λΌλ μ§μλ³μλ₯Ό inner ν¨μμμ κΈ°μ΅νκ³ μμ΅λλ€!
μ¬κΈ°μ κΆκΈν μ μ, inner ν¨μλ outerValue κ°μΈ "κ²μ λ°μ" μ΄λΌλ κ°μ μ΄λ»κ² κΈ°μ΅νλ κ±ΈκΉμ?
μ΄μ λν΄μ λ μ컬 μ€μ½νμ λν΄ μ΄ν΄νκ³ μμ΄μΌ ν©λλ€.
μμ μν©μμ ν¨μκ° μ€νλλ©΄ μλ°μ€ν¬λ¦½νΈλ μΈλΆ λ μ컬 νκ²½κ³Ό λ΄λΆ λ μ컬 νκ²½μ΄λΌλ κ³ μ ν μ ν¨ λ²μλ₯Ό κ°μ΅λλ€. κ·Έλ¦¬κ³ μ΄λ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν©λλ€.
μΈλΆ λ μ컬 νκ²½μ λ§κ·Έλλ‘ ν¨μ λ°κΉ₯μ λ²μλ₯Ό μ°Έμ‘°νκ³ , λ΄λΆ λ μ컬 νκ²½μ ν¨μ λ΄λΆμμ μ¬μ©λ μΈμλ μ§μλ³μλ₯Ό μ°Έμ‘°ν©λλ€.
ν¨μ λ΄λΆμμ λ³μλ₯Ό μ¬μ©ν λλ μΌλ¨ λ΄λΆ λ μ컬 νκ²½μ νμν ν, μ°Ύλ λ³μκ° μλ€λ©΄ μΈλΆ λ μ컬 νκ²½μΌλ‘ μ΄λν΄ λ³μλ₯Ό μ°Ύμ΅λλ€. μ΄κ²μ΄ closureμ λλ€. (μμ μκΈ° νλ―μ΄)
κ·ΈλΌ μ΄λ»κ² "κ²μ λ°μ"μ΄ μΆλ ₯λμλμ§ μ΄λ μ λ κ°μ΄ μ€μλμ?
ν¨μ μ’ λ£ νμλ μ¬λΌμ§μ§ μλ μ§μ λ³μλ₯Ό λ§λ€ μ μμ΅λλ€!
λ λμκ°μ κ°μ μ§ν₯μ μΊ‘μνμ κΈ°λ₯μ ν΄λ‘μ λ₯Ό ν΅ν΄ ꡬνν μ μμ΅λλ€.