일급 객체
1. 변수에 할당 가능
2. 다른 함수의 인자로 전달 가능
3. 다른 함수의 결과로서 리턴이 가능
함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 걸 의미합니다
고차 함수
함수를 인자로 받을 수 있으며, 함수의 형태로 리턴할 수 있는 함수.
자주 쓰는 메소드들 : map
, filter
, reduce
map
: 배열의 각 요소에 콜백함수를 적용시킨 새로운 배열을 리턴 / 콜백함수에 두번째 인자를 주면 인덱스를 가져옴filter
: 배열의 각 요소에 콜백함수를 적용시켰을 때, true
를 리턴하는 요소들만 모은 새로운 배열을 리턴reduce
: 배열의 각 요소를 콜백함수에 맞게 하나로 응축시킨 값을 리턴 / 초기값을 설정하지 않으면 배열의 첫 요소가 acc, cur은 두 번째 요소부터 시작forEach
, find
, sort
, some
, every
등등let arr = [1, 2, 3, 4];
let output = arr.filter(짝수만 고르고 싶어요);
console.log(output); // ->> [2, 4]
여기서 걸러내는 기준이 되는 특정 조건(짝수만 고르고 싶어요)은 filter 메소드의 인자로 전달됨. 이때 전달되는 조건은 함수의 형태이다. -> filter 메소드는, 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문에 고차함수이다.
Array.prototype.filter = function(func) {
const arr = this;
const newArr = []
for(let i = 0; i < arr.length; i++) { // 배열의 요소들 루프
if (func(arr[i]) === true) { // 그 요소가 조건에 만족해서 true라면
newArr.push(this[i]) // 그 요소를 push
}
}
return newArr; // true인 요소들만 push했던 새로운 배열을 반환
}
위 코드를 바탕으로 다시 구현해보면
let output = arr.filter(function (el){
return num % 2 === 0; // 짝수라면 true이므로 해당하는 요소들로만 이루어진 새로운 배열을 반환해줌.
})
복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
-> 생산성(productivity)의 향상
브라우저 창에 주소를 입력했을 때, 어떤 일이 일어나는지 정확하게 알고 있나요?
입력한 내용을 전파하고, 어디 서버로 갔다가 다른 서버로 가는 등 그런 복잡한 내용을, 일상생활에서는 몰라도 됩니다. 우리는 그저 주소창에 올바른 주소를 입력하면, 브라우저가 해당 사이트를 보여 준다는 것만 알고 있습니다.
자동차의 시동 버튼, 자료를 정리하는 엑셀, 지하철/버스를 타기 위한 교통 카드도 추상화의 결과입니다.
함수 = 값을 전달받아 값을 리턴한다 = 값에 대한 복잡한 로직은 감추어져 있다 = 값 수준에서의 추상화