CodeStates/learning contents
Unit 9. [JS]ν΄λ‘μ
Jieunny
2022. 12. 23. 09:49
π£ ν΄λ‘μ ν¨μ
βοΈ νμ΄ν ν¨μ
const add = (x, y) => x + y;
add(5, 7) // 12
βοΈ νμ΄νλ₯Ό λ λ² μ¬μ©
const adder = x => y => x + y;
adder(5)(7); // 12
typeof adder(5) // 'function'
adder(5) // y => x + y μ μμ²΄κ° λ¦¬ν΄κ°μ.
ν¨μμ νΈμΆμ΄ λ λ² λ°μνλ€.
adder(5)μ λ¦¬ν΄ κ°μ΄ ν¨μμμ μλ―Έ -> (y => x + y) μμ²΄κ° adder(5)μ 리ν΄κ°μ΄λ€.
βοΈ ν΄λ‘μ ν¨μμ κΈ°λ³Έ νν
const adder = function(x) {
return function(y) {
return x + y;
}
}
1οΈβ£ ν¨μλ₯Ό 리ν΄νλ ν¨μ
2οΈβ£ ν΄λ‘μ μ ν΅μ¬μ 'μ€μ½νλ₯Ό μ΄μ©ν΄μ λ³μμ μ κ·Όμ λ«λ(closure) λ°'μ μλ€.
Ⱐ리ν΄νλ ν¨μμ μν΄ μ€μ½νκ° κ΅¬λΆλλ€.
β° μ μμμμ xκ° μ μΈλ ν¨μλ 'μΈλΆ ν¨μ', yκ° μ μΈλ ν¨μλ 'λ΄λΆ ν¨μ'λΌκ³ λΆλ₯Έλ€.
=> μ΄ ν΄λ‘μ ν¨μλ μ€μ½νκ° λΆλ¦¬λμ΄ μλ€λ μλ―Έ.
π¨ λ΄λΆ ν¨μμ μ μΈλ λ³μλ μΈλΆ ν¨μκ° μ¬μ©ν μ μλ€.
π¨ 3οΈβ£ μΈλΆ ν¨μμ μ μΈλ λ³μλ λ΄λΆ ν¨μκ° μ¬μ©ν μ μλ€.
π£ ν΄λ‘μ μ νμ©
βοΈ μΈλΆ ν¨μμ μ€νμ΄ λλλλΌλ, μΈλΆ ν¨μ λ΄ λ³μκ° λ©λͺ¨λ¦¬ μμ μ μ₯λλ€.
const adder = function(x) {
return function(y) {
return x + y;
}
}
const add5 = adder(5); // y => x + y μ¬κΈ°μ xμ 5λΌλ κ°μ΄ λ΄κ²¨μμ.
add5(7) // 12 yμ 7μ΄λΌλ κ°μ λ£μ.
add5(10) // 15
λ³μ add5 μλ ν΄λ‘μ λ₯Ό ν΅ν΄ 리ν΄ν ν¨μκ° λ΄κ²¨ μλ€.
add5 λ adder ν¨μμμ μΈμλ‘ λκΈ΄ 5λΌλ κ°μ x λ³μμ κ³μ λ΄κ³ μλ€. (μΈλΆ ν¨μμ μ€νμ΄ λλ¬λλ°λ)
μΈλΆ ν¨μ μ€νμ μ΄λ―Έ λλ¬μ§λ§, add5(7) μ²λΌ x=5 λΌλ κ°μ μ¬μ© κ°λ₯νλ€.
βοΈ ν΄λ‘μ λ‘ HTML λ¬Έμμ΄ λ§λ€κΈ°
const tagMaker = tag => content => `<${tag}>${content}</${tag}>`
const divMaker = tagMaker('div');
divMaker('hello'); // '<div>hello</div>' μΈλΆ ν¨μκ° λλλ tagλ κ³μ divλ₯Ό λ΄κ³ μκ³ μ¬μ©κ°λ₯ν¨.
divMaker('codestates'); // '<div>codestates</div>'
const anchoMaker = tagMaker('a');
anchoMaker('go'); // '<a>go</a>'
anchorMaker('urclass'); // '<a>urclass</a>'
νΉμ λ°μ΄ν°λ₯Ό μ€μ½ν μμ κ°λμ΄ λ μ±λ‘ κ³μ μ¬μ©ν μ μκ² ν΄μ€λ€.
βοΈ ν΄λ‘μ λͺ¨λ ν¨ν΄
βοΈ λͺ¨λν : ν¨μμ μ¬μ¬μ©μ±μ κ·Ήλννμ¬ ν¨μ νλλ₯Ό μμ ν λ 립μ μΈ λΆν ννλ‘ λΆλ¦¬νλ κ².
const makeCounter = () => {
let value = 0;
return {
increase: () => {
value = value + 1
},
decrease: () => {
value = value - 1
},
getValue: () => value
}
}
const counter1 = makeCounter();
counter1.increase();
counter1.decrease();
counter1.getValue(); // 0
const counter2 = makeCounter();
counter2.decrease();
counter2.decrease();
counter2.getValue(); // -2
λ΄λΆ ν¨μλ₯Ό κ°μ²΄μ λ΄μ μ¬λ¬ κ°μ λ΄λΆ ν¨μλ₯Ό 리ν΄νλλ‘ λ§λ λ€.
counter1 μ { increase: f, decrease: f, getValue: f } κ°μ²΄μ΄λ€.
π¨ μ΄λ€ κ²½μ°μλ value λ μ§μ μμ μ΄ λΆκ°λ₯ νλ€ -> μΈλΆ μ€μ½νμμλ λ΄λΆ μ€μ½νμ λ³μμ μ κ·Ό ν μ μκΈ° λλ¬Έ
β° λμ , 리ν΄νλ κ°μ²΄κ° μ 곡νλ λ©μλλ₯Ό ν΅ν΄ value κ°μ κ°μ μ μΌλ‘ μ‘°μ ν μ μλ€. -> μ 보μ μ κ·Ό μ ν(μΊ‘μν)
λ§μ½ μ€μ½νλ‘ valueλ₯Ό κ°μΈμ§ μμλ€λ©΄ valueλ₯Ό λ€λ£¨κΈ° μν΄μλ valueμ κ°μ΄ μ μ λ³μμ¬μΌ νμ κ²μ΄λ€.
ν΄λ‘μ λ‘ λΆνμν μ μ λ³μ μ¬μ©μ μ€μ΄κ³ , κ°μ μμ νκ² λ€λ£° μ μλ€.
counter1κ³Ό counter2μμ valueλ κ°κ° λ 립μ μ΄λΌμ μλ‘μκ² μν₯μ λΌμΉμ§ μλλ€.