1급시민
1급시민
이란, 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 값을 뜻한다.
- 아래와 같은 조건을 모두 가질 때 일급시민이라고 부른다.
- 다른 변수에 할당 될 수 있다.
- 함수의 매개변수로 사용이 가능하다.
- 함수의 결과로 리턴 될 수 있다.
- 객체가 위의 조건을 만족하는 경우,
1급객체
라고 하며, 함수는 위의 조건을 만족하는 1급객체
와 동시에 1급함수
이다.
- 왜
1급함수
가 아니고 1급객체
라고 표현함?
- JS 상에서 함수는 객체로 취급된다.
- 심지어 프로퍼티를 추가하여 값을 가질 수도 있다.
고차함수란?
- 함수를 인자로 받을 수 있으며, 함수의 형태로 리턴 할 수 있는 함수를 고차함수라고 한다.
- 이때, 인자로 전달되는 함수를
콜백(callback)함수
라고 한다.
→ 콜백함수를 인자로 가지고 있는 함수는 콜러(caller)
라고 한다.
- 이때, 콜백함수를 가지는 구조의 함수를 커리함수라고 한다.
→ 정확히는 고차함수라는 큰 카테고리에 커리함수가 포함된다.
- 함수가 1급객체이기 때문에 고차함수라는 것이 존재 할 수 있다.
→ 변수에 할당 될 수 있고, 인자로 사용 될 수 있고, 함수의 리턴 값이 될 수도 있다.
커링
이라는 단어는 다수의 인자를 받는 함수를 단일 인자를 받는 함수의 체인으로 만드는 것을 뜻한다.
→ 즉, 콜백을 받는 함수이다.
→아래의 예시에서 함수를 리턴하는 형태 참고.
고차함수의 형태
let argFn = (num) => {
return num * 2
}
let mainFn = (func, num) => {
return func(num)
}
mainFn(argFn, 5)
let outerFn = (outerParam) => {
return function (innerParam){
return outerParam + innerParam
}
}
outerFn(15)(5)
let outer10 = outerFn(10)
outer10(5)
const plus10 = (num) => {
return num + 10;
}
const addFunc = (outerNum, func) => {
const plused10 = func(outerNum);
return function (innerNum) {
return innerNum + plused10;
};
}
addFunc(10, plus10)(10)
let plused15 = addFunc(5, plus10)
plused15(10)
+
- 함수 표현식은 호이스팅이 적용되지 않는다.
→ 함수 선언만 호이스팅이 적용됨.
- 호이스팅에 의존하면 유지보수가 힘들어진다.
→ 작성된 함수를 사용하기 위해 자꾸 위아래로 왔다가 갔다가 해야함.
- 어떤 함수인지 감은 오지만 내가 잘 써먹을 수 있을지는 미지수...