일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 제로베이스
- 개발자북클럽
- 최원영 저자
- 백준
- javascript
- js
- 노마드 코더
- 톺아보기
- 오블완
- 이해할 수 있는
- 프로그래머스
- IT 지식
- nomadcoders
- 자바스크립트
- SQLD
- 알고리즘
- CodeStates
- 노개북
- 엘리스코딩
- 모던 자바스크립트 deep dive
- K-Digital Credit
- 티스토리챌린지
- 공부를 가장한 일기일지도
- 구름edu
- 자격증
- SQL 개발자
- boj
- 노마드코더
- 비전공자를 위한
- Do it! 시리즈
- Today
- Total
개발자를 희망하는 초보의 자기개발 이야기
JavaScript 일급객체와 고차 함수 본문
JavaScript 일급객체와 고차함수
: 일급객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킵니다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 합니다.
const foo = function() {
console.log("foobar");
}
// 변수를 사용해 호출
foo();
- 함수를 변수에 할당
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`를 `greeting` 함수에 인자로 전달
greeting(sayHello, "JavaScript!");
- 함수를 인자로 전달
function sayHello() {
return function() {
console.log("Hello!");
}
}
- 함수를 함수로 반환. 이를 고차함수라 합니다.
고차 함수
: 고차함수는 함수를 인자로 받거나 반환함으로써 작동하는 함수를 말합니다. 이 때 다른 함수의 인자로 전달되는 함수를 콜백 함수라고 합니다.
function makeFunc() {
let name = "Mozilla";
function displayName() {
console.log(name); // "Mozilla"
}
return displayName;
}
var myFunc = makeFunc();
myFunc(); // "Mozilla"
다른 함수를 인자로 받는 경우
: 아래 예시에서 doubleNum은 다른 함수를 인자로 받는 고차 함수입니다. 이 때 함수 doubleNum의 첫 번째 인자 func에 함수가 들어올 경우 함수 func는 함수 doubleNum의 콜백 함수입니다. 아래와 같은 경우, 함수 double은 함수 doubleNum의 콜백 함수입니다.
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
let output = doubleNum(double, 4);
console.log(output); // -> 8
함수를 리턴하는 경우
: 함수 adder는 다른 함수를 리턴하는 고차 함수입니다. adder는 인자 한 개를 입력받아서 함수(익명 함수)를 리턴합니다. 리턴되는 익명 함수는 인자 한 개를 받아서 added와 더한 값을 리턴합니다. adder(5)는 함수이므로 함수 호출 연산자 '()'를 사용할 수 있습니다. adder가 리턴하는 함수를 변수에 저장할 수 있습니다. javascript에서 함수는 일급 객체이기 때문입니다.
function adder(added) {
return function (num) {
return num + added;
};
}
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
함수를 인자로 받고, 함수를 리턴하는 경우
: 함수 doubleAdder는 고차 함수입니다. 함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수 입니다. 함수 double은 함수 doubleAdder의 콜백으로 전달되었습니다. doubleAdder(5, double)는 함수이므로 함수 호출 기호 '()'를 사용할 수 있습니다. doubleAdder가 리턴하는 함수를 변수에 저장할 수 있습니다. (일급 객체)
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added); // double(5) = 10
return function (num) { // 3
return num + doubled; // 3 + 10
};
}
doubleAdder(5, double)(3); // -> 13
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
정리
- 일급객체 : 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체
- 고차함수 : 함수를 인자로 받거나 반환함으로써 작동하는 함수
- 콜백함수 : 다른 함수의 인자로 전달되는 함수
참고
'프론트엔드(Front-end) > JavaScript' 카테고리의 다른 글
JavaScript DOM(Document Object Model) (0) | 2021.02.06 |
---|---|
JavaScript 내장 고차 함수(forEach, filter, map, reduce) (0) | 2021.01.24 |
JavaScript Closure (0) | 2021.01.18 |
JavaScript 실행 컨텍스트(execution context)와 호이스팅(hoisting) (0) | 2021.01.10 |
JavaScript Scope chain과 Lexical scoping (0) | 2021.01.10 |