[λͺ©ν]
ν΄λ‘μ ν¨μμ μ μμ νΉμ§μ λν΄μ μ΄ν΄ν μ μλ€.
ν΄λ‘μ κ° κ°λ μ€μ½ν λ²μλ₯Ό μ΄ν΄ν μ μλ€.
ν΄λ‘μ λ₯Ό μ΄μ©ν΄ μ μ©νκ² μ°μ΄λ λͺ κ°μ§ ν¨ν΄μ μ΄ν΄ν μ μλ€.
[μ°Έκ³ ]
ν΄λ‘μ 곡λΆνκΈ° μ νμ΄ν ν¨μλ₯Ό μμ보μ!
νμ΄ν ν¨μλ μ΅λͺ ν¨μλ‘λ§ μ¬μ©ν μ μλ€. λ°λΌμ νμ΄ν ν¨μλ₯Ό νΈμΆνκΈ° μν΄μλ ν¨μ ννμμ μ¬μ©νλ€.
const pow = x => x * x;
console.log(pow(10)); // 100
ν΄λ‘μ λ?
ν¨μμ ν¨μκ° μ μΈλ μ΄νμ νκ²½μ μ‘°ν©
λ°νλ λ΄λΆν¨μκ° μμ μ΄ μ μΈλμ λμ νκ²½μΈ μ€μ½νλ₯Ό κΈ°μ΅νμ¬ μμ μ΄ μ μΈλμ λμ νκ²½(μ€μ½ν) λ°μμ νΈμΆλμ΄λ κ·Έ νκ²½(μ€μ½ν)μ μ κ·Όν μ μλ ν¨μ
ν΄λ‘μ νΉμ§κ³Ό μμ
π νΉμ§ 1. ν¨μμ νΈμΆμ΄ λ λ² λ°μ
βοΈ ν¨μμ νΈμΆμ΄ λ λ² λ°μνλ νμ΄ν ν¨μ // νμ΄ν ν¨μλ₯Ό λ λ² μ¬μ©ν λ§μ ν¨μ
const adder = x => y => x + y;
adder(5)(7); // 12
βοΈ μΌλ°μ μΈ νμ΄ν ν¨μλ₯Ό μ΄μ©ν κ°λ¨ν λ§μ ν¨μ
const add = (x, y) => x + y;
add(5,7); // 12
π νΉμ§2. ν¨μλ₯Ό 리ν΄νλ ν¨μ // 리ν΄κ°μ΄ ν¨μλ€.
βοΈ ν¨μλ₯Ό 리ν΄νλ ν¨μ1 // 리ν΄κ°μ΄ ν¨μ
const adder = x => y => x + y;
adder(5)(7); // 12
typeof adder(5) // 'function' (리ν΄κ°μ΄ ν¨μ νν)
adder(5) // y => x + y (리ν΄κ°μ΄ ν¨μ νν)
βοΈ ν¨μλ₯Ό 리ν΄νλ ν¨μ2 // 리ν΄κ°μ΄ ν¨μ
const adder = function (x) {
return function (y) {
return x + y;
}
}
π νΉμ§3. 리ν΄νλ ν¨μμ μν΄ μ€μ½ν(λ³μμ μ κ·Ό λ²μ)κ° κ΅¬λΆλλ€.
π νΉμ§4. λ΄λΆ ν¨μλ μΈλΆ ν¨μμ μ μΈλ λ³μμ μ κ·Ό κ°λ₯νλ€.
βοΈ μΈλΆ ν¨μμ λ΄λΆ ν¨μ
const adder = function (x) {
return function (y) {
return x + y;
}
}
xκ° μ μΈλ ν¨μλ λ°κΉ₯μͺ½μ μμ΄μ 'μΈλΆ ν¨μ'
yκ° μ μΈλ ν¨μλ μμͺ½μ μμ΄μ 'λ΄λΆ ν¨μ'
κ·Έλμ μ΄ ν΄λ‘μ ν¨μλ μ€μ½νκ° λΆλ¦¬λμ΄ μλ€.
μ΄λ, μΈλΆ ν¨μλ yμ μ κ·Ό λΆκ°λ₯!
λ΄λΆ ν¨μλ xμ μ κ·Ό κ°λ₯!
π νΉμ§5. λ°μ΄ν°λ₯Ό 보쑴νλ€.
ν΄λ‘μ λ μΈλΆ ν¨μμ μ€νμ΄ λλλλΌλ, μΈλΆ ν¨μ λ΄ λ³μκ° λ©λͺ¨λ¦¬ μμ μ μ₯λλ€. (μ΄νμ νκ²½μ λ©λͺ¨λ¦¬μ μ μ₯ν΄μ)
// μΌλ°μ μΈ ν¨μλ ν¨μ μ€νμ΄ λλκ³ λλ©΄ ν¨μ λ΄λΆμ λ³μλ₯Ό μ¬μ©ν μ μλ€.
const adder = function (x) {
return function (y) {
return x + y;
}
}
const add5 = adder(5);
β₯ λ³μ add5μλ ν΄λ‘μ λ₯Ό ν΅ν΄ 리ν΄ν ν¨μκ° μλ€.
add5λ adderν¨μμμ μΈμλ‘ λκΈ΄ 5λΌλ κ°μ xλ³μμ κ³μ λ΄μ μ±λ‘ λ¨μμλ€.
κ·Έλμ μΈλΆ ν¨μ μ€νμ΄ λλλ 5λΌλ κ°μ μ¬μ©κ°λ₯νλ€!
const adder = function (x) {
return function (y) {
return x + y;
}
}
const add5 = adder(5);
add5(7) // 12
add5(10) // 15
β₯ λ³μ add5μ κ°κ° 7κ³Ό 10μ μΈμλ‘ λ³΄λ΄λ©΄, xμ 5κ°μ΄ λ¨μμμ΄μ κ°κ° 12, 15κ° λμ¨λ€.
π νΉμ§6. μ 보 μ κ·Όμ μ ννλ€. (μΊ‘μν) // βοΈν΄λ‘μ λ₯Ό μ°λ μ΄μ βοΈ
const makeCounter = () => {
let value = 0;
return {
increase: () => {
value = value + 1
},
decrease: () => {
value = value - 1
},
getValue: () => value
}
}
const counter1 = makeCounter();
β¬οΈ 'ν΄λ‘μ λͺ¨λ ν¨ν΄'
makeCounterλ₯Ό μ€νν΄μ λ³μλ₯Ό λ΄μ보면 increase, decrease, getValue λ©μλλ₯Ό ν¬νν κ°μ²΄λ₯Ό 리ν΄νλ€.
λ°λΌμ λ³μ counter1μ κ°μ²΄!
βοΈμ¬κΈ°μ valueλΌλ λ³μμ μλ‘κ² κ°μ ν λΉν μλ μλ€. μλλ©΄ μ€μ½ν κ·μΉ λλ¬Έμ!
λ§μ½ valueκ° μ μλ³μμλ€λ©΄, λ€λ₯Έ ν¨μλ λ‘μ§μ μν΄ μλλμ§ μμ λ³κ²½μ΄ λ μ μλ€.
κ·Έλμ ν΄λ‘μ λ₯Ό ν΅ν΄μ λΆνμν μ μ λ³μ μ¬μ©μ μ€μ΄κ³ , μ€μ½νλ₯Ό μ΄μ©ν΄μ κ°μ λ³΄λ€ μμ νκ² λ€λ£° μ μλ€.
ν΄λ‘μ λ₯Ό μ½κ² μ΄ν΄ν΄λ³΄μ!
κ³μ’μ΄μ²΄λΌκ³ νλ©΄ λ³μκ° μ μμΌ κ²½μ° λκ΅°κ°κ° μ μ νλ‘κ·Έλ¨μ 건λλ €μ μ‘κΈλλ κ³μ’λ²νΈλ₯Ό λκ΅°κ°κ° μλ‘μ΄ functionμ λͺ°λ λ§λ€μ΄μ μ λ ₯λλ κ³μ’λ₯Ό λ³ΈμΈμ κ³μ’λ‘ λ§λ€μ΄ λ²λ¦΄ μ μλ€. κ·Όλ° μ μ λ³μκ° μλλΌ μ λ κ² κ°μΈ λμΌλ©΄ μ²μμ μ λ ₯νλ ν¨μμμ κ³μ’λ²νΈλ₯Ό μ λ ₯λ°μμ λ£μ΄ λ²λ¦¬κ³ ν¨μλ₯Ό μ’ λ£ν΄ λ²λ ΈμΌλ λμ΄μ λκ΅°κ°λ ν΄λΉ κ³μ’λ²νΈλ₯Ό λ°κΎΈμ΄ λ²λ¦΄ μ μλ€.
κ·Έλ¦¬κ³ ν΄λ‘μ λ‘ λ§λ€μ΄μ§ λμ 보λ΄λ ν¨μκ° μ‘κΈν λ ν΄λΉ κ³μ’λ³μμ μ κ·Όνλλ° ν΄λ‘μ κ° μλλΌ μ μλ³μλΌλ©΄ μ‘κΈνλ ν¨μλ₯Ό μ€ννκΈ° μ μ λͺ°λ κ³μ’λ₯Ό λ³ΈμΈ κ³μ’λ‘ λ°κΎΈμ΄λ²λ¦¬λ μΌμ΄ λ°μν μλ..!
π νΉμ§7. ν¨μ μ¬μ¬μ©μ΄ κ°λ₯νλ€. (λͺ¨λν)
const makeCounter = () => {
let value = 0;
return {
increase: () => {
value = value + 1
},
decrease: () => {
value = value - 1
},
getValue: () => value
}
}
const counter1 = makeCounter();
counter1.increase();
counter1.increase();
counter1.decrease();
counter1.getValue(); // 1
const counter2 = makeCounter();
counter1.decrease();
counter1.decrease();
counter1.decrease();
counter1.getValue(); // -3
<μ°Έκ³ >
getValue λ©μλλ μΈλΆ ν¨μμ μ μΈλ value κ°μ 리ν΄νλ ν¨μλ€.
μ€μννΉμ§ βοΈ
makeCounterλ₯Ό μ€νν λμ μ μΈλλ value κ°μ κ°μ λ 립μ μΌλ‘ μ¬μ©νκΈ° λλ¬Έμ,
counter1κ³Ό counter2μ valueλ μλ‘μκ² μν₯μ λΌμΉμ§λ μλλ€!!!
ν΄λ‘μ λ₯Ό ν΅ν΄ λ°μ΄ν°μ λ©μλλ₯Ό κ°μ΄ λ¬Άμ΄μ λ€λ£° μ μλ€. (λͺ¨λν κ°λ₯)
var a = 0;
function foo() {
var b = 0;
return function() {
console.log(++a, ++b);
};
}
var f1 = foo();
var f2 = foo();
f1(); // --> 1 1
f1(); // --> 2 2
f2(); // --> 3 1
f2(); // --> 4 2
// f1κ³Ό f2λ κ°μ λ
립μ μΌλ‘ μ¬μ©λκΈ° λλ¬Έμ μ μλ³μμΈ aμ κ°λ§ μ¬λΌκ°κ³ b κ°μ κ°κ° κ³μ°λλκ±°λ€.