고차함수란 무엇인가

사건의 발단

회사 업무 중 콜백 함수에서 비동기 처리를 하는데 왜 이렇게 동작을 하지? 의문에 빠졌다. 간단한 예제로 설명하자면

setTimeout(alert("함수를 실행합니다."), 1000);

setTimeout(() => {alert("함수를 실행합니다.")}, 1000);
  • 위 두 코드의 차이가 무엇인가? 였다.

그래서?

첫 번째 코드는 일정 시간 후에 함수를 실행시키는 setTimeout() 1초를 지연시킨 후 alert()을 호출하게 했는데 바로 alert()창이 떴다.

두 번째 코드로 실행하니 원하는 동작대로 작동했다. 원인이 무엇일까 생각해보다가 질문을 남겼다. 모르고 넘어가는거보다 빨리 물어보고 빨리 깨닫는게 낫다!

잘못 알고있었다. alert()은 함수가 아니다. 함수 실행 결과다. alert이 함수다. 함수 호출 연산자 () 가 뒤에 붙었기 때문이다. ()가 특수한 구문인지 인지를 못하고 코드를 짠 결과였다. setTimeout는 delay 시간이 지난 다음에 함수를 실행하는데 alert()은 실행하고 난 결과를 반환하기 때문에 원하는대로 작동이 안한것이다. alert()을 익명 함수로 감싸게 되면 alert()의 평가 시점을 익명 함수 실행 시점으로 지연시킬 수 있다.

그렇게 작동하는지 모르고 사용법만 익힌 결과였다. 항상 이렇게 사용해야하는지 이렇게 작동하는지 공부하자.

그렇다면 고차함수는 뭘까?

고차 함수(Higher order function)는 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수를 말한다.

고차 함수는 매개변수를 가두는 방법을 통해 특별한 값을 제공하므로, 나중에 원래의 인수에 접근할 수 있게 해두고 함수 실행을 마칠 수 있습니다. 또한, 매개변수를 분리해 함수의 의도를 명확하게 유지할 수 있습니다. -자바스크립트 코딩의 기술-

고차 함수는 다른 함수를 반환하는 함수이기 때문에 함수 실행이 완전히 끝날때까지 최소한 두 단계에 걸친 매개변수가 존재한다.

results matching ""

    No results matching ""