고차 함수
는 매개 변수(parameter)를 통해 콜백 함수를 전달받은 함수입니다.
콜백 함수
는 매개 변수(parameter)를 통해 다른 함수의 내부로 전달되는 함수입니다.
⭐️ 추가한 내용
고차 함수는 매개 변수로 전달 받은 콜백 함수의 호출 시점을 결정해서 호출합니다. 다시 말해, (모든 콜백 함수가 그런 것은 아니지만) 콜백 함수는 고차 함수에 의해 호출되며, 이때 고차 함수는 필요에 따라서 콜백 함수에argument
를 전달할 수 있습니다. 따라서 고차 함수에 콜백 함수를 전달할 때 콜백 함수를 호출하지 않고 함수 자체를 전달해야 합니다.
<모던 자바스크립트 Deep Dive>, 185p
위에 추가한 내용은 연습 문제를 풀다가 배열 고차 함수를 사용하다가 의문이 들어 찾아보았습니다. 특히 함수를 만들고 이를 배열 고차 함수에 넘겨줄 때 함수의 이름
을 넘겨 주는 것이 눈에 익지 않았습니다.
생각해보니, 그동안 고차 함수 내부에 화살표 함수
를 콜백 함수로서 바로 작성했기 때문인 것 같습니다.
위의 내용을 통해 콜백 함수는 함수 내부에서 바로 호출하지 않고 함수의 이름 자체
를 전달하거나 화살표 함수
를 전달하면 된다는 것을 새롭게 알았습니다.
다시 찾아보니 화살표 함수를 호출하기 위해서는 표현식으로 작성해야 한다고 합니다.(6.3 Arrow function 화살표 함수) 다시 말해 배열 메서드에 화살표 함수를 작성하는 것은 호출이 아니라 함수 선언이라고 할 수 있습니다.
⭐️ 조금만 생각해보면 당연하겠지만, 항상 무의식적으로 사용하다보니까 이게 호출인지 선언인지도 생각하지 않고 지나친 것 같습니다. 덕분에 리마인드 할 수 있었습니다.
reduce(콜백 함수, 초기값)
이 기본 사용법입니다.
초기값을 설정해주지 않으면
콜백함수의 acc는 첫 번째 배열 요소, cur는 두 번째 배열 요소입니다.
초기값을 설정해주면
콜백함수의 acc는 초기값, cur는 첫 번째 배열 요소입니다.
⭐️ 특히 초기값을 설정해주면 빈 배열일 경우 acc를 초기값으로 반환할 수 있도록한다는 것을 알게 되었습니다. 즉 예외 처리에 유용하기 때문에 초기값을 세팅해주는 것이 좋을 것 같습니다.
특히 조건문을 활용해 조건에 맞는 배열 요소에만 콜백 함수 내부를 실행하게 할 수 있다는 것을 새롭게 알게 되었습니다.
예를 들어 reduce
함수의 가장 기본적인 예제인 배열 요소들의 합 뿐만 아니라 배열 요소 중 짝수 요소들의 합만 구할 수도 있습니다.
function sumEvenNum(arr){
//배열의 각 요소에 대해서 함수를 실행하는데,
return arr.reduce((acc, cur)=>{
//현재 요소가 짝수라면
if(cur % 2 === 0){
//acc에 cur를 더해서 반환하고
return acc + cur;
} else {
//cur를 더하지 말고 그대로 반환한다.
return acc;
}
}, 0)
}
git restore --staged [커밋에서 제외할 파일 이름]
git add .
git restore --staged [커밋에서 제외할 파일 이름]
git commit -m ...
//이렇게 하면 커밋에서 제외할 파일을 뺀 나머지 파일들이 커밋됩니다.