π Chapter 5: ν΄λ‘μ
π ν΄λ‘μ μ μλ―Έ λ° μ리 μ΄ν΄β
- ν΄λ‘μ (Closure)λ μ¬λ¬ ν¨μν νλ‘κ·Έλλ° μΈμ΄μμ λ±μ₯νλ 보νΈμ μΈ νΉμ±μ΄λ€.
- ν΄λ‘μ λ₯Ό ν λ¬Έμ₯μΌλ‘ μμ½
- μμ μ λ΄ν¬νλ ν¨μμ 컨ν μ€νΈμ μ κ·Όν μ μλ ν¨μ (μλ°μ€ν¬λ¦½νΈ ν΅μ¬ κ°μ΄λ)
- ν¨μκ° νΉμ μ€μ½νμ μ κ·Όν μ μλλ‘ μλμ μΌλ‘ κ·Έ μ€μ½νμμ μ μνλ κ² (λ¬λ μλ°μ€ν¬λ¦½νΈ)
- ν¨μλ₯Ό μ μΈν λ λ§λ€μ΄μ§λ μ ν¨λ²μκ° μ¬λΌμ§ νμλ νΈμΆν μ μλ ν¨μ (μλ°μ€ν¬λ¦½νΈ λμ λΉκΈ)
- μ΄λ―Έ μλͺ μ£ΌκΈ°μ λλ μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°νλ ν¨μ (μΈμ¬μ΄λ μλ°μ€ν¬λ¦½νΈ)
- μμ λ³μκ° μλ ν¨μμ μμ λ³μλ₯Ό μ μ μλ νκ²½μ κ²°ν© (Head First Javascript Programming)
- λ‘컬 λ³μλ₯Ό μ°Έμ‘°νκ³ μλ ν¨μ λ΄μ ν¨μ (μλ°μ€ν¬λ¦½νΈ λ§μ€ν°λΆ)
- μμ μ΄ μμ±λ λμ μ€μ½νμμ μ μ μμλ λ³μλ€ μ€ μΈμ κ° μμ μ΄ μ€νλ λ μ¬μ©ν λ³μλ€λ§μ κΈ°μ΅νλ©° μ μ§μν€λ ν¨μ (ν¨μν μλ°μ€ν¬λ¦½νΈ νλ‘κ·Έλλ°)
- ν΄λ‘μ λ ν¨μμ κ·Έ ν¨μκ° μ μΈλ λΉμμ lexical environment(λ μ컬 νκ²½)μ μνΈκ΄κ³μ λ°λ₯Έ νμ (MDN)
- μ΄λ€ 컨ν μ€νΈ Aμμ μ μΈν λ΄λΆν¨μ Bμ μ€ν 컨ν μ€νΈκ° νμ±νλ μμ μλ Bμ outerEnvironmentReferenceκ° μ°Έμ‘°νλ λμμΈ Aμ LexicalEnvironmentμλ μ κ·Όμ΄ κ°λ₯νλ€. Aμμλ Bμμ μ μΈν λ³μμ μ κ·Όν μ μμ§λ§ Bμμλ Aμμ μ μΈν λ³μμ μ κ·Όμ΄ κ°λ₯νλ€.
- λ΄λΆν¨μμμ μΈλΆ λ³μλ₯Ό μ°Έμ‘°νμ§ μλ κ²½μ°λ ν΄λΉνμ§ μλλ€. μ¦, μ μΈλ λΉμμ LexicalEnvironmentμμ μνΈκ΄κ³μ΄λ€.
var outer = function() {
var a = 1;
var inner = function() {
console.log(++a); // 2
};
inner();
};
outer();
- μ μμμ
inner
ν¨μ λ΄λΆμμλa
λ₯Ό μ μΈνμ§ μμκΈ° λλ¬Έμ environmentRecordμμ κ°μ μ°Ύμ§ λͺ»νλ―λ‘ outerEnvironmentReferenceμ μ§μ λ μμ 컨ν μ€νΈμΈ LexicalEnvironmentμ μ κ·Όν΄μ λ€μa
λ₯Ό μ°Ύλλ€. outer
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λλ©΄ LexicalEnvironmentμ μ§μ λ μλ³μλ€(a
,inner
)μ λν μ°Έμ‘°λ₯Ό μ§μ΄λ€. κ·Έλ¬λ©΄ κ° μ£Όμμ μ μ₯λΌ μλ κ°λ€μ μμ μ μ°Έμ‘°νλ λ³μκ° νλλ μκ² λλ―λ‘ κ°λΉμ§ 컬λ ν°μ μμ§ λμμ΄ λ κ²μ΄λ€.
var outer = function() {
var a = 1;
var inner = function() {
return ++a;
};
return inner();
};
var outer2 = outer();
console.log(outer2); // 2
- μ μμ μμλ
inner
ν¨μλ₯Ό μ€νν κ²°κ³Όλ₯Ό 리ν΄νκ³ μμΌλ―λ‘ κ²°κ³Όμ μΌλ‘outer
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ μμ μλa
λ³μλ₯Ό μ°Έμ‘°νλ λμμ΄ μμ΄μ§λ€. - μ λ μμ μμ
outer
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λκΈ° μ΄μ μinner
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λΌ μμΌλ©°, μ΄ν λ³λμinner
ν¨μλ₯Ό νΈμΆν μ μλ€λ 곡ν΅μ μ΄ μλ€. - κ·Έλ λ€λ©΄
outer
μ μ€ν 컨ν μ€νΈκ° μ’ λ£λ νμλinner
ν¨μλ₯Ό νΈμΆν μ μκ² λ§λ€λ©΄ μ΄λ¨κΉ?
var outer = function() {
var a = 1;
var inner = function() {
return ++a;
};
return inner;
};
var outer2 = outer();
console.log(outer2()); // 2
console.log(outer2()); // 3
- μ μμ μμ
inner
ν¨μ μ체λ₯Ό λ°ννλ€. κ·Έλ¬λ©΄outer
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ λouter2
λ³μλouter
μ μ€ν κ²°κ³ΌμΈinner
ν¨μλ₯Ό μ°Έμ‘°νκ² λ κ²μ΄λ€. inner
ν¨μμ μ€ν 컨ν μ€νΈμ environmentRecordμλ μμ§ν μ λ³΄κ° μλ€. outerEnvironmentReferenceμλinner
ν¨μκ° μ μΈλ μμΉμ LexicalEnvironmentκ° μ°Έμ‘°λ³΅μ¬λλ€.inner
ν¨μλouter
ν¨μ λ΄λΆμμ μ μΈλμΌλ―λ‘,outer
ν¨μμ LexicalEnvironmentκ° λ΄κΈΈ κ²μ΄λ€.- μ΄μ μ€μ½ν 체μ΄λμ λ°λΌ
outer
μμ μ μΈν λ³μa
μ μ κ·Όν΄μ 1λ§νΌ μ¦κ°μν¨ ν κ·Έ κ°μΈ 2λ₯Ό λ°ννκ³ ,inner
ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λλ€. - κ·Έλ°λ°
inner
ν¨μμ μ€ν μμ μλouter
ν¨μλ μ΄λ―Έ μ€νμ΄ μ’ λ£λ μνμΈλ°outer
ν¨μμ LexicalEnvironmentμ μ΄λ»κ² μ κ·Όνλ κ²μΌκΉ? - μ΄λ κ°λΉμ§ 컬λ ν°μ λμ λ°©μ λλ¬ΈμΈλ° κ°λΉμ§ 컬λ ν°λ μ΄λ€ κ°μ μ°Έμ‘°νλ λ³μκ° νλλΌλ μλ€λ©΄ κ·Έ κ°μ μμ§ λμμ ν¬ν¨μν€μ§ μλλ€.
outer
ν¨μλ μ€ν μ’ λ£ μμ μinner
ν¨μλ₯Ό λ°ννλ€. μΈλΆν¨μμΈouter
μ μ€νμ΄ μ’ λ£λλλΌλ λ΄λΆ ν¨μμΈinner
ν¨μλ μΈμ κ°outer2
λ₯Ό μ€νν¨μΌλ‘μ¨ νΈμΆλ κ°λ₯μ±μ΄ μ΄λ¦° κ²μ΄λ€. λλ¬Έμ κ°λΉμ§ 컬λ ν°μ μμ§ λμμμ μ μΈκ° λλ κ²μ΄λ€.- μ΄μ²λΌ ν¨μμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ νμλ LexicalEnvironmentκ° κ°λΉμ§ 컬λ ν°μ μμ§ λμμμ μ μΈλλ κ²½μ°λ λ§μ§λ§ μμ μ²λΌ μ§μλ³μλ₯Ό μ°Έμ‘°νλ λ΄λΆν¨μκ° μΈλΆλ‘ μ λ¬λ κ²½μ°κ° μ μΌνλ€.
ν΄λ‘μ λ₯Ό λ€μ μ μν΄λ³΄λ©΄ ν΄λ‘μ λ μ΄λ€ ν¨μ Aμμ μ μΈν λ³μ aλ₯Ό μ°Έμ‘°νλ λ΄λΆν¨μ Bλ₯Ό μΈλΆλ‘ μ λ¬ν κ²½μ° Aμ μ€ν 컨ν μ€νΈκ° μ’ λ£λ μ΄νμλ λ³μ aκ° μ¬λΌμ§μ§ μλ νμμ΄λ€.
- νκ°μ§ μ£Όμν μ μ μΈλΆλ‘ μ λ¬μ΄ 곧
return
λ§μ μλ―Ένλ κ²μ μλλ€. μλ μ½λλreturn
μμ΄λ ν΄λ‘μ κ° λ°μνλ μν©μ΄λ€.
// setInterval/setTimeout
(function () {
var a = 0;
var intervalId = null;
var inner = function () {
if(++a >= 10) {
clearInterval(intervalId);
}
console.log(a);
};
intervalId = setInterval(inner, 1000);
})();
// eventListener
(function () {
var count = 0;
var button = document.createElement('button');
button.innerText = 'click';
button.addEventListener('click', function () {
console.log(++count, 'times clicked');
});
document.body.appendChild(button);
})();
- μ λ μν© λͺ¨λ μ§μλ³μλ₯Ό μ°Έμ‘°νλ λ΄λΆν¨μλ₯Ό μΈλΆμ μ λ¬νκΈ° λλ¬Έμ ν΄λ‘μ μ΄λ€.
π ν΄λ‘μ μ λ©λͺ¨λ¦¬ κ΄λ¦¬β
- ν΄λ‘μ λ μ΄λ€ νμμ μν΄ μλμ μΌλ‘ ν¨μμ μ§μλ³μλ₯Ό λ©λͺ¨λ¦¬λ₯Ό μλͺ¨νλλ‘ ν¨μΌλ‘μ¨ λ°μνλ€. κ·Έλ λ€λ©΄ κ·Έ νμμ±μ΄ μ¬λΌμ§ μμ μλ λλ λ©λͺ¨λ¦¬λ₯Ό μλͺ¨νμ§ μκ² ν΄μ£Όλ©΄ λλ€.
// return μ μν ν΄λ‘μ μ λ©λͺ¨λ¦¬ ν΄μ
var outer = (function () {
var a = 1;
var inner = function () {
return ++a;
};
return inner;
})();
console.log(outer());
console.log(outer());
outer = null; // outer μλ³μμ inner ν¨μ μ°Έμ‘°λ₯Ό λμ
console.log(outer()); // TypeError: outer is not a function
setInterval
μ μν ν΄λ‘μ λ©λͺ¨λ¦¬ ν΄μ
(function () {
var a = 0;
var intervalId = null;
var inner = function () {
if(++a >= 10) {
clearInterval(intervalId);
inner = null; // inner μλ³μμ ν¨μ μ°Έμ‘°λ₯Ό λμ
}
console.log(a);
};
intervalId = setInterval(inner, 1000);
})();
eventListener
μ μν ν΄λ‘μ λ©λͺ¨λ¦¬ ν΄μ
(function () {
var count = 0;
var button = document.createElement('button');
button.innerText = 'click';
var clickHandler = function () {
console.log(++count, 'times clicked');
if(count >= 10) {
button.removeEventListener('click', clickHandler);
clickHandler = null; // clickHandler μλ³μμ ν¨μ μ°Έμ‘°λ₯Ό λμ
}
};
button.addEventListener('click', clickHandler);
document.body.appendChild(button);
})();
π ν΄λ‘μ νμ© μ¬λ‘β
π μ½λ°± ν¨μ λ΄λΆμμ μΈλΆ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ μ ν λβ
var fruits = ['apple', 'banana', 'peach'];
var ul = document.createElement('ul');
fruits.forEach(function (fruit) { // A
var li = document.createElement('li');
li.innerText = fruit;
li.addEventListener('click', function () { // B
alert('your choice is ' + fruit);
});
ul.appendChild(li);
});
document.body.appendChild(ul);
- μ μ μ μμ A μ½λ°± ν¨μλ κ·Έ λ΄λΆμμ μΈλΆ λ³μλ₯Ό μ¬μ©νμ§ μκ³ μμΌλ―λ‘ ν΄λ‘μ κ° μμ§λ§,
addEventListener
μ λκ²¨μ€ B μ½λ°± ν¨μμλfruit
μ΄λΌλ μΈλΆ λ³μλ₯Ό μ°Έμ‘°νκ³ μμΌλ―λ‘ ν΄λ‘μ κ° μλ€. - Aλ fruitsμ κ°μλ§νΌ μ€νλλ©°, κ·Έλλ§λ€ μλ‘μ΄ μ€ν 컨ν μ€νΈκ° νμ±λ κ²μ΄λ€. Aμ μ€ν μ’ λ£ μ¬λΆμ 무κ΄νκ² ν΄λ¦ μ΄λ²€νΈμ μν΄ κ° μ»¨ν μ€νΈμ Bκ° μ€νλ λλ Bμ outerEnvironmentReferenceκ° Aμ LexicalEnvironmentλ₯Ό μ°Έμ‘°νκ² λ κ²μ΄λ€. λ°λΌμ μ΅μν B ν¨μκ° μ°Έμ‘°ν μμ μΈ λ³μ fruitμ λν΄μλ Aκ° μ’ λ£λ νμλ GC λμμμ μ μΈλμ΄ κ³μ μ°Έμ‘°κ° κ°λ₯νλ€.
- μ΄μ λ°λ³΅μ μ€μ΄κΈ° μν΄ Bλ₯Ό μΈλΆλ‘ λΆλ¦¬ν΄λ³Έλ€. μ¦
fruit
λ₯Ό μΈμλ‘ λ°μ μΆλ ₯νλ ννλ‘..
var fruits = ['apple', 'banana', 'peach'];
var ul = document.createElement('ul');
var alertFruit = function (fruit) {
alert('your choice is ' + fruit);
}
fruits.forEach(function (fruit) { // A
var li = document.createElement('li');
li.innerText = fruit;
// 첫 λ²μ§Έ μΈμμ μ΄λ²€νΈ κ°μ²΄λ₯Ό μ£Όμ
νκΈ° λλ¬Έμ bind λ©μλλ₯Ό ν μ©
li.addEventListener('click', alertFruit.bind(null, fruit));
ul.appendChild(li);
});
document.body.appendChild(ul);
- λ€λ§ μ΄λ κ² νλ©΄ μ΄λ²€νΈ κ°μ²΄κ° μΈμλ‘ λμ΄μ€λ μμκ° λ°λλ μ λ° ν¨μ λ΄λΆμμμ
this
κ° μλμ κ·Έκ²κ³Ό λ¬λΌμ§λ μ μ κ°μν΄μΌ νλ€. κ·Έλ κΈ° λλ¬Έμ μ¬κΈ°μ κ³ μ°¨ν¨μλ₯Ό νμ©νλ€.
var fruits = ['apple', 'banana', 'peach'];
var ul = document.createElement('ul');
var alertFruitBuilder = function (fruit) {
return function () {
alert('your choice is ' + fruit);
}
}
fruits.forEach(function (fruit) { // A
var li = document.createElement('li');
li.innerText = fruit;
// 첫 λ²μ§Έ μΈμμ μ΄λ²€νΈ κ°μ²΄λ₯Ό μ£Όμ
νκΈ° λλ¬Έμ bind λ©μλλ₯Ό ν μ©
li.addEventListener('click', alertFruitBuilder(fruit));
ul.appendChild(li);
});
document.body.appendChild(ul);
alertFruitBuilder
ν¨μλ₯Ό μ€ννλ©΄μfruit
κ°μ μΈμλ‘ μ λ¬νκ³ μ΄ ν¨μμ μ€ν κ²°κ³Όκ° λ€μ ν¨μκ° λλ©°, μ΄λ κ² λ°νλ ν¨μλ₯Ό 리μ€λμ μ½λ°± ν¨μλ‘μ¨ μ λ¬ν κ²μ΄λ€.- μ΄ν ν΄λ¦ μ΄λ²€νΈκ° λ°μνλ©΄ μ΄ ν¨μμ μ€ν 컨ν
μ€νΈκ° μ΄λ¦¬λ©΄μ
alertFruitBuilder
μ μΈμλ‘ λμ΄μ¨fruit
λ₯Ό outerEnvironmentReferenceμ μν΄ μ°Έμ‘°ν μ μλ€. μ¦,alertFruitBuilder
μ μ€ν κ²°κ³Όλ‘ λ°νλ ν¨μμλ ν΄λ‘μ κ° μ‘΄μ¬νλ€.
π μ κ·Ό κΆν μ μ΄(μ 보 μλ)β
- ν΄λ‘μ λ₯Ό μ΄μ©νλ©΄ ν¨μ μ°¨μμμ
public
ν κ°κ³Όprivate
ν κ°μ ꡬλΆνλ κ²μ΄ κ°λ₯νλ€.
var outer = function () {
var a = 1;
var inner = function () {
return ++a;
};
return inner;
};
var outer2 = outer();
console.log(outer2()); // 2
console.log(outer2()); // 3
return {
get move() {
},
run: function() {
}
}
outer
ν¨μλ₯Ό μ’ λ£ν λinner
ν¨μλ₯Ό λ°νν¨μΌλ‘μ¨outer
ν¨μμ μ§μλ³μμΈa
μ κ°μ μΈλΆμμλ μ½μ μ μκ² λμλ€. μ΄μ²λΌ ν΄λ‘μ λ₯Ό νμ©νλ©΄ μΈλΆ μ€μ½νμμ ν¨μ λ΄λΆμ λ³μλ€ μ€ μ νμ μΌλ‘ μΌλΆ λ³μμ λν μ κ·Ό κΆνμ λΆμ¬ν μ μλ€.return
μ νμ©ν΄μ κ°λ₯νλ€.outer
ν¨μλ μΈλΆ(μ μ μ€μ½ν)λ‘λΆν° μ² μ νκ² κ²©λ¦¬λ λ«ν 곡κ°μ΄λ€. μΈλΆμμλ μΈλΆ 곡κ°μ λ ΈμΆλΌ μλouter
λΌλ λ³μλ₯Ό ν΅ν΄outer
ν¨μλ₯Ό μ€νν μλ μμ§λ§,outer
ν¨μ λ΄λΆμλ μ΄λ ν κ°μ λ ν μ μλ€. μΈλΆμμλ μ€μ§outer
ν¨μκ°return
ν μ 보μλ§ μ κ·Όν μ μλ€.return
κ°μ΄ μΈλΆμ μ 곡λλ μ μΌν μλ¨μ΄λ€.- κ·Έλ κΈ° λλ¬Έμ μΈλΆμ μ 곡νκ³ μ νλ μ 보λ€μ λͺ¨μμ
return
νκ³ , λ΄λΆμμλ§ μ¬μ©ν μ 보λ€μreturn
νμ§ μλ κ²μΌλ‘ μ κ·Ό κΆν μ μ΄κ° κ°λ₯ν κ²μ΄λ€.
π λΆλΆ μ μ© ν¨μβ
- λΆλΆ μ μ© ν¨μλ
n
κ°μ μΈμλ₯Ό λ°λ ν¨μμ 미리m
κ°μ μΈμλ§ λ겨 κΈ°μ΅μμΌ°λ€κ°, λμ€μ(n - m)
κ°μ μΈμλ₯Ό λκΈ°λ©΄ λΉλ‘μ μλ ν¨μμ μ€ν κ²°κ³Όλ₯Ό μ»μ μ μκ² λ νλ ν¨μμ΄λ€.
var partial = function () {
var originalPartialArgs = arguments;
var func = originalPartialArgs[0];
if (typeof func !== 'function') {
throw new Error('첫 λ²μ§Έ μΈμκ° ν¨μκ° μλλλ€.');
}
return function () {
var partialArgs = Array.prototype.slice.call(originalPartialArgs, 1);
var restArgs = Array.prototype.slice.call(arguments);
return func.apply(this, partialArgs.concat(restArgs));
};
};
var add = function () {
var result = 0;
for (var i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
};
var addPartial = partial(add, 1, 2, 3, 4, 5);
console.log(addPartial(6, 7, 8, 9, 10)); // 55
var dog = {
name: 'κ°μμ§',
greet: partial(function(prefix, suffix) {
return prefix + this.name + suffix;
}, 'μμ, ');
};
dog.greet('μ
λλ€!'); // μμ, κ°μμ§μ
λλ€!
- λ€μ μμ λ λλ°μ΄μ€(debounce)μ λν μμ μ΄λ€. λλ°μ΄μ€λ 짧μ μκ° λμ λμΌν μ΄λ²€νΈκ° λ§μ΄ λ°μν κ²½μ° μ΄λ₯Ό μ λΆ μ²λ¦¬νμ§ μκ³ μ²μ λλ λ§μ§λ§μ λ°μν μ΄λ²€νΈμ λν΄ ν λ²λ§ μ²λ¦¬νλ κ²μΌλ‘, νλ°νΈμλ μ±λ₯ μ΅μ νμ ν° λμμ μ£Όλ κΈ°λ₯ μ€ νλλ€. (
scroll
,wheel
,mousemove
.resize
λ± μ μ©)
var debounce = function (eventName, func, wait) {
var timeoutId = null;
return function (event) {
var self = this;
console.log(eventName, 'event λ°μ');
clearTimeout(timeoutId);
timeoutId = setTimeout(func.bind(self, event), wait);
};
};
var moveHandler = function (e) {
console.log('move event μ²λ¦¬');
};
var wheelHandler = function (e) {
console.log('wheel event μ²λ¦¬');
};
document.body.addEventListener('mousemove', debounce('move', moveHandler, 500));
document.body.addEventListener('mousewheel', debounce('wheel', wheelHandler, 700));
- μ΅μ΄
event
κ° λ°μνλ©΄ timeoutμ λκΈ°μ΄μwait
μκ° λ€func
λ₯Ό μ€ννλ€. κ·Έλ°λ°wait
μκ°μ΄ κ²½κ³ΌνκΈ° μ΄μ μ λ€μ λμΌνevent
κ° λ°μνλ©΄clearTimeout
μΌλ‘ 무쑰건 λκΈ°νλ₯Ό μ΄κΈ°ννκ² νλ€. λ€μ μλ‘μ΄ λκΈ°μ΄μ λ±λ‘νλ€.
π μ»€λ§ ν¨μβ
- μ»€λ§ ν¨μλ μ¬λ¬ κ°μ μΈμλ₯Ό λ°λ ν¨μλ₯Ό νλμ μΈμλ§ λ°λ ν¨μλ‘ λλ μ μμ°¨μ μΌλ‘ νΈμΆλ μ μκ² μ²΄μΈ ννλ‘ κ΅¬μ±ν κ²μ λ§νλ€.
- 컀λ§μ ν λ²μ νλμ μΈμλ₯Ό μ λ¬νλ κ²μ μμΉμΌλ‘ νκ³ μ€κ° κ³Όμ μμ ν¨μλ₯Ό μ€νν κ²°κ³Όλ κ·Έλ€μ μΈμλ₯Ό λ°κΈ° μν΄ λκΈ°λ§ ν λΏμΌλ‘, λ§μ§λ§ μΈμκ° μ λ¬λκΈ° μ κΉμ§λ μλ³Έ ν¨μκ° μ€νλμ§ μλλ€.
var curry3 = function (func) {
return function (a) {
return function (b) {
return func(a, b);
};
};
};
var getMaxWith10 = curry3(Math.max)(10);
console.log(getMaxWith10(8)); // 10
console.log(getMaxWith10(25)); // 25
var getMinWith10 = curry3(Math.min)(10);
console.log(getMinWith10(8)); // 8
console.log(getMinWith10(25)); // 10
- κ° λ¨κ³μμ λ°μ μΈμλ€μ λͺ¨λ λ§μ§λ§ λ¨κ³μμ μ°Έμ‘°ν κ²μ΄λ―λ‘ GCλμ§ μκ³ λ©λͺ¨λ¦¬μ 차곑차곑 μμλ€κ°, λ§μ§λ§ νΈμΆλ‘ μ€ν 컨ν μ€νΈκ° μ’ λ£λ νμμΌ λΉλ‘μ νκΊΌλ²μ GCμ μκ±° λμμ΄ λλ€.
- μ¦, λΉμ₯ νμν μ λ³΄λ§ λ°μμ μ λ¬νκ³ λ νμν μ λ³΄κ° λ€μ΄μ€λ©΄ μ λ¬νλ μμΌλ‘ νλ©΄ κ²°κ΅ λ§μ§λ§ μΈμκ° λμ΄κ° λκΉμ§ ν¨μ μ€νμ λ―Έλ£° μ μλ€. μ΄λ₯Ό ν¨μν νλ‘κ·Έλ¨λ°μμ μ§μ°μ€νμ΄λΌκ³ νλ€.