자바스크립트는 함수가 함수를 반환할 수 있다
const func = () => {
return () => {
console.log("hello");
};
};
const innerFunc = func();
innerFunc() //hello
func 함수를 호출하면 함수를 반환한다.
const func = (message)=>{
return()=>{
console.log(message)
}
}
const innerFunc1=func("love")
const innerFunc2=func("javascript")
innerFunc1() //love
innerFunc2() //javascript
func함수를 실행해주면 func함수에 넣은 매개변수를 console.log하는 함수가 반환 된다
전달만 하지 실행은 하지 않기 때문에 console.log 출력하고 싶다면 innerFunc 함수를 실행시켜 주면 된다
{ 와 return 생략가능하다
const func = (message)=>{
return()=>{
console.log(message)
}
}
const func = (message) => () => {
console.log(message);
};
의미 : message라는 매개변수를 가지고 함수를 return하는데 그 함수는 () => { console.log(message) } 이다
지금까지 만드는 작은 프로젝트들은 중복을 제거하기 쉽지만 실무에서는 모든 내부 코드가 같은 함수보다 대부분 다 비슷한데 특정부분만 다른 함수가 많다.
(활용하기 위한 쉬운 예시)만약 계산기를 만든다고 가정해보자.
아직 이벤트 위임을 배우지 않아서 각 연산자버튼마다 이벤트 리스너를 등록해 줬다. 고차함수 이용하지 않고서는 함수의 중복을 피하기 힘들어 진다.
const onClickOperator=(op)=>()=>{
if(numberOne){
operator=op;
$operator.value=op;
}else {
alert('숫자를 먼저 입력하세요')
}
}
document.querySelector("#plus").addEventListener("click",onClickOperator('+'))
document.querySelector("#minus").addEventListener("click",onClickOperator('-'))
document.querySelector("#multiply").addEventListener("click",onClickOperator('*'))
document.querySelector("#divide").addEventListener("click",onClickOperator('/'))
const hof = (a) => (b) => (c) => {
return a + b * c;
};
const first = hof(3);
const second = first(4);
const third = second(5);
console.log(third);
Let's get it 자바스크립트 프로그래밍