JavaScript에는 일급 객체가 존재합니다. 대표적인 일급 객체 중 하나가 함수이며 일급 객체 란 다른 객체들에 일반적으로 적용 가능한 연상르 모두 지원하는 객체를 가리킵니다.
변수에 할당(assignment)할 수 있다.
다른 함수를 인자(argument)로 전달 받는다.
다른 함수의 결과로서 리턴될 수 있다.
위에 대한 조건으로 인해 알 수 있는 것은 함수를 데이터
(string, number, boolean, array, object) 다루 듯이 다룰 수 있다는 점이다.
--> 함수 역시 할당하여 다루는 것이 가능하다는 의미이다.
그렇다면, 함수가 일급객체이기 때문에 할 수 있는 것은 무엇인가?
고차함수
, 콜백
..
변수에 할당한다는것은 함수 표현식으로 생각할 수 있다.
const mult = function (num) {
return num*num;
}
// 변수 mult에 함수가 할당되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
output = mult(4);
console.log(mult); // --> 16
function mult(num) {
return num*num;
}
// func = 매개변수 이름은 무관
function multNum(func, number) {
return func(number);
}
let result = multNum(mul, 4); // 16
mult()
의 매개변수는 하나, multNum()
의 매개변수(number)또한 하나여야한다.mult()
의 매개변수가 2개면 multNum()
의 매개변수도 2개이여야한다.multNum()
의 매개변수인 func는 위의 mult()
을 나타낸다.multNum()
인자로 다른 함수(mult())
를 받아오기 때문에 고차함수라고 한다. + mul
은 콜백함수
라고 한다.function add(num1) {
return function (num2) {
return num1 + num2;
}
}
add(5)(6); // 11
반환값으로도 사용될 수 있다.
고차 함수는 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수입니다.
다른 함수의 전달인자로 전달되는 함수를 콜백 함수라고 합니다.
filter 메서드는 자신을 호출한 배열의 모든 요소를 순회하면서 임수로 전달받은 콜백 함수를 반복호출하고, 콜백 함수의 반환값이
true
인 요소로만 구성된새로운 배열
을 반환한다.
true
인 요소로만 구성 된 새로운 배열을 반환한다.map 메서드는 자신을 호출한 배열의 모든 요소를 순회하며 콜백 함수를 반복호출하고 다른 값으로 매핑한
새로운 배열
을 생성한다.
map 메서드가 생성하여 반환하는 새로운 배열의 length값은 호출한 배열의 length값과 1대1로 매핑하여 일치한다.
reduce 메서드는 자신을 호출한 배열을 모든 요소를 순회하며 인수로 받은 콜백 함수를 반복 호출한다. 콜백 함수의 반환값을 다음 순회 시 첫번째 인수로 전달하며 결과값을 만들어 반환한다. 이때 원본 배열은 변경되지 않는다.