함수를 변수와 같이 다루는 언어에 있는 개념
function isOddNum (number) {
console.log(
(number % 2 ? '홀' : '짝')
+ '수입니다.'
);
return number % 2 ? true : false;
};
const checkIfOdd = isOddNum; // 뒤에 괄호 없음 유의
// 괄호가 있으면 함수를 실행해서 반환된 값을 넣어주는 것
let list = [1, 2, 3, 4, 5];
function doInArray (array, func) {
for (item of array) {
func(item);
}
}
// console.log - console이란 객체에서 log란 키에 할당된 함수
doInArray(list, console.log);
// doInArray: 고차 함수, console.log: 콜백 함수
function getIntroFunc (name, formal) {
return formal
? function () {
console.log(`안녕하십니까, ${name}입니다.`);
} : function () {
console.log(`안녕하세요~ ${name}이라고 해요.`);
}
}
const hongIntro = getIntroFunc('홍길동', true);
const jeonIntro = getIntroFunc('전우치', false);
hongIntro(); // 안녕하십니까, 홍길동입니다.
jeonIntro(); // 안녕하세요~ 전우치이라고 해요.
// 기존의 코드
function addMultSubt (a, b, c, d) {
return (a + b) * c - d;
}
const addMultSubt2 = (a, b, c, d) => (a + b) * c - d;
console.log(
addMultSubt(2, 3, 4, 5),
addMultSubt2(2, 3, 4, 5),
);
// ⭐ 커링으로 작성된 함수
function curryAddMultSubt (a) {
return function (b) {
return function (c) {
return function (d) {
return (a + b) * c - d;
}
}
}
}
const curryAddMultSubt2 = a => b => c => d => (a + b) * c - d;
const curryAddMultSubtFrom2 = curryAddMultSubt(2);
const curryMultSubtFrom5 = curryAddMultSubt(2)(3);
const currySubtFrom20 = curryAddMultSubt(2)(3)(4);
console.log(
curryAddMultSubtFrom2(3)(4)(5),
curryMultSubtFrom5(4)(5),
currySubtFrom20(5)
); // 15 15 15