대표적인 일급 객체 중 하나가 함수이다.
- 변수에 할당(assignment)할 수 있다. <---- 함수를 데이터처럼 다룰 수 있다.
- 다른 함수의 인자(argument)로 전달될 수 있다.
- 다른 함수의 결과로서 리턴될 수 있다.
- 호이스팅은 선언된 위치에 관계없이 어디서든 함수를 사용할 수 있도록 한다.
- 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 한다.
- var변수 선언과 함수 선언식에서만 일어나며 호이스팅에 의존하면 코드 유지보수가 쉽지않다.
고차 함수는 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수이다.
'함수를 인자로 받는 함수'를 커리 함수라 한다.
'다른 함수에 인자로 들어가는 함수'를 콜백 함수라 한다.
자바스크립트에는 기본적으로 내장된 고차함수가 여럿 있다.
모든 요소에게 동일한 함수를 주어 모두 반환한다.
기존배열을 수정하지 않는다.
예시 코드
let arr = [1, 2, 3]; let result = arr.map(function(ele) {return ele * 2}); result; // [2, 4, 6]
해석
let 배열변수 = 요소를담은배열 let 결과배열변수 = 배열변수.map(function(모든요소){return 모든요소 * 2}) 결과배열변수 // 함수에 의해 변한 모든요소를 담은 배열
모든 요소 중 함수에 맞는 요소만 반환한다.
기존배열을 수정하지 않는다.
예시 코드
let arr = [1, 2, 3]; let result = arr.filter(function(ele){return ele % 2 !== 0}); result; // [1, 3]
해석
let 배열변수 = 요소를담은배열; let 결과배열변수 = 배열변수.filter(function(모든요소){return 조건}); 결과배열변수; // 조건에 맞는 요소를 담은 배열
모든 요소를 함수로 하나의 값으로 만들어 반환한다.
초기값(별도로 지정하지않으면 첫번째 요소)와 현재값을 행동해 누적값 반환
예시 코드
let arr = [1, 2, 3]; let init = 0; let result = arr.reduce(function(pre, cur){return pre + cur}, init); result; // 6
해석
let 배열변수 = 요소를담은배열; let 초기값 = 0; let 결과배열변수 = 배열변수.reduce(function(이전값, 현재값){return 이전값 + 현재값}, 초기값); result; // 초기값 + 현재값1(이전값) + 현재값2...의 결과값
함수를 모든 요소에 각각 실행한다.
기존배열을 수정하지 않는다.
예시 코드
let arr = [1, 2, 3]; let result = []; arr.forEach(function(ele){result.push(ele + '번')}); result; // ['1번', '2번', '3번']
해석
let 배열변수 = 요소를담은배열 let 결과배열변수 = 빈배열 배열변수.forEach(function(모든요소){result.push(모든요소 + '번')}); result; // 모든요소가 ''번'을 붙여 빈배열에 넣어라'에 각각 동작했다.
모든 요소 중 함수에 맞는 첫번째 요소의 값만 반환한다.
예시 코드
let arr = [1, 2, 3]; let result = arr.find(function(ele){return ele % 2 !== 0}); result; // 1
해석
let 배열변수 = 요소를담은배열; let 결과배열변수 = 배열변수.filter(function(모든요소){return 조건}); 결과배열변수; // 조건에 맞는 첫번째 요소의 값
모든 요소를 정렬한 후 그 배열을 반환한다.
기존배열이 수정된다.
예시 코드
let arr = [2, 3, 1, 10]; arr.sort(); // <-----------------------------유니코드순 정렬 console.log(arr); arr.sort(function(a, b){return a - b}); //<---오름차순 정렬 console.log(arr); // [1, 10, 2, 3] // [1, 2, 3, 10]
모든 요소중 하나라도 함수에 맞았는지 boolean값을 반환한다.
주어진 배열이 빈배열일 경우 false를 반환한다.
예시 코드
let arr = [1, 2, 3]; let result = arr.some(function(ele){return ele % 2 !== 0}); result; // true
해석
let 배열변수 = 요소를담은배열; let 결과배열변수 = 배열변수.some(function(모든요소){return 조건}); 결과배열변수; // 모든 요소중 하나라도 조건에 맞았는지의 boolean값
모든 요소가 함수에 맞았는지 boolean값을 반환한다.
예시 코드
let arr = [1, 2, 3]; let result = arr.every(function(ele){return ele % 2 !== 0}); result; // false
해석
let 배열변수 = 요소를담은배열; let 결과배열변수 = 배열변수.every(function(모든요소){return 조건}); 결과배열변수; // 모든 요소가 조건에 맞았는지의 boolean값