일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- BOM
- Scope
- Til
- CSS 박스모델
- block 박스
- placeholder
- history API
- overflow: hidden
- github
- 시맨틱
- 외계행성의 나이
- 코드스테이츠
- display와 visibility
- 오블완
- Code States
- section태그와 article태그의 차이점
- HTML요소
- CSS Object Model
- flex box
- 프로그래머스
- GIT
- javascript
- CSS 스타일
- opacity
- 스코프
- HTML5문서
- 티스토리챌린지
- 템플릿 문자열
- 깃허브
- 객체지향프로그래밍
- Today
- Total
해말그미의 코딩공부
고차 함수 본문
JavaScript에도 특별한 대우를 받는 일급 객체(first-class citizen)가 있습니다. 대표적인 일급 객체 중 하나가 함수입니다. JavaScript에서 함수는 아래와 같이 특별하게 취급됩니다.
- 변수에 할당(assignment)할 수 있다.
- 다른 함수의 전달인자(argument)로 전달될 수 있다.
- 다른 함수의 결과로써 리턴될 수 있다.
함수를 변수에 할당할 수 있기 때문에, 함수를 배열의 요소나 객체의 속성 값으로 저장할 수 있습니다. 함수를 데이터(string, number, boolean, array, object)처럼 다룰 수 있습니다.
<고차 함수>
=> 함수를 리턴하는 함수
=> 함수를 전달인자로 받는 함수
function adder(added) {
return function (num) {
return num + added;
};
}
/*
* 함수 adder는 다른 함수를 리턴하는 고차 함수입니다.
* adder는 인자 한 개를 입력받아서 함수(익명 함수)를 리턴합니다.
* 리턴되는 익명 함수는 인자 한 개를 받아서 added와 더한 값을 리턴합니다.
*/
// adder(5)는 함수이므로 함수 호출 연산자 '()'를 사용할 수 있습니다.
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
// adder가 리턴하는 함수를 변수에 저장할 수 있습니다.
// javascript에서 함수는 일급 객체이기 때문입니다.
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
함수를 리턴하는 경우이다.
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
/*
* 함수 doubleAdder는 고차 함수입니다.
* 함수 doubleAdder의 인자 func는 함수 doubleAdder의 콜백 함수입니다.
* 함수 double은 함수 doubleAdder의 콜백으로 전달되었습니다.
*/
// doubleAdder(5, double)는 함수이므로 함수 호출 기호 '()'를 사용할 수 있습니다.
doubleAdder(5, double)(3); // -> 13
// doubleAdder가 리턴하는 함수를 변수에 저장할 수 있습니다. (일급 객체)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
함수를 인자로 받고, 함수를 리턴하는 경우이다.
<배열 메서드>
🌻배열의 filter 메서드
모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는/ 따로 분류하는 메서드
걸러내는 기준이 되는 특정 조건은 filter 메서드의 전달인자로 전달된다. 이때 전달되는 조건은 함수의 형태이다.
filter 메서드는, 걸러내기 위한 조건을 명시한 함수를 전달인자로 받기 때문에 고차함수이다.
arr.filter를 실행하면 내부적으로 arr에 접근할 수 있다고 생각해도 된다.filter에 전달인자로 전달된 콜백 함수는 arr의 각 요소를 전달받아 호출된다.콜백함수가 true를 리턴하는 경우에만 새로운 배열에 추가돤다.
=> filter 메서드의 정확한 정의는 아래와 같다.
Array.prototype.filter = function(func) {
* const arr = this;
* const newArr = []
* for(let i = 0; i < arr.length; i++) {
* if (func(arr[i]) === true) {
* newArr.push(this[i])
* }
* }
* return newArr;
🌻 배열의 map 메서드
특정 논리 함수에 의해 다른 요소로 지정된다.
map은 이렇게 하나의 데이터를 다른 데이터로 매핑(mapping) 할 때 사용합니다.
🌻 배열의 reduce 메서드
배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 응축한다.
reduce는 문자열이나 숫자등을 합치거나 더하고 뺄 수도 있고, 제일 작은거나 큰 것을 비교할 수도 있고, 배열 이외의 다른 형태로도 만들 수 있다.
배열의 여러가지 사용법
'자바스크립트' 카테고리의 다른 글
자바스크립트 기초 (0) | 2023.05.26 |
---|---|
삼항 연산자 (0) | 2023.05.06 |
스코프(Scope) (0) | 2023.03.03 |
원시 자료형과 참조 자료형 (1) | 2023.03.02 |
배열 메소드 (Array methods) (0) | 2023.03.01 |