ν΄λ‘μ λ μλ°μ€ν¬λ¦½νΈκ° κ°μ§κ³ μλ 2κ°μ§ νΉμ§ λλ¬Έμ λ§λ€μ΄μ§ μ©μ΄μ΄λ€.
μλ°μ€ν¬λ¦½νΈ μ체λ ν¨μλ₯Ό μ μνμ§ μκ³ ν¨μλ₯Ό κ°μ²΄λ‘ λ§λ€μ΄μ κ·Έ μμ²΄κ° μ μλ€! λΌκ³ νλ€(?)
ν¨μλ₯Ό κ°μ²΄λ‘ λ§λ€κΈ° λλ¬Έμ κ·Έ κ°μ²΄ μμ²΄κ° λ°ν λ μλ μκ³ ν¨μκ° ν¨μ μμμ λ§λ€μ΄μ§ μλ μλ€.
κ·Έλ¬λ€λ³΄λ ν¨μκ° κ°μ§κ³ μλ μ§μλ³μμ λν λ¬Έμ κ° ν΄λ‘μ λΌλ κ²μ λ³κ² λλ€.
λ λ΄λ μ€μ λ§
μ°Έμ‘° : https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures#ν΄λ‘μ closure
function makeAdder(x){
var y = 1;
return function(z){ // ν΄λ‘μ
y = 100;
return x + y + z;
}
}
var add5 = makeAdder(5); // ν¨μλ₯Ό μ°Έμ‘° => λ§€κ°λ³μ xμ μΈμ 5μ λμ
var add10 = makeAdder(10); // ν¨μλ₯Ό μ°Έμ‘° x = 10 => λ§€κ°λ³μ xμ μΈμ 10μ λμ
// ν΄λ‘μ μ xμ yμ νκ²½μ΄ μ μ₯λ¨
console.log(add5(2)); // 107 (x:5 + y:100 + z:2) => xμ κ°μ΄ μ΄μμλ μνμμ zκ°μ λμ
console.log(add10(2)); // 112 (x:10 + y:100 + z:2)
// (?)
console.log(makeAdder(5)(2)); // 107λ‘ λμΌ (?)
μκΈ°κ° μ¬μ©νκ³ μλ μμμ λ«μμ μκ² ν΄μ£Όλ μ μΌν ν€μλλ€ λΌκ³ ν΄μ ν΄λ‘μ λΌκ³ νλ€.
μ΄λ° ν΄λ‘μ λ‘ μΈν΄μ μμμ΄ κ³μ λ¬Άμ΄λ μΌμ΄ λ°μν μ μλλ°, μ΄ μμμ μκ³ λ¬Άλκ²κ³Ό λͺ¨λ₯΄κ³ λ¬Άλκ²μ λ€λ₯΄λ€.
ν΄λ‘μ κ° λ°μνμ§ μλλ‘ νλ‘κ·Έλ¨μ μ λ§λ€κ±°λ, μΌλΆλ¬ ν΄λ‘μ λ₯Ό λ§λ€ μλ μλ€.
ES5μ νλ‘ν νμ
μ μν κ°μ²΄μ§ν₯μ΄ μ΄λ€μ§λλ° μ΄λ μΌλΆλ¬ ν΄λ‘μ λ₯Ό λ§λ€κ² λλ€. λμ€μ λ°°μΈκ²