고차함수 map, filter (1)

Deb-neal·2021년 6월 19일
1

고차함수

목록 보기
1/2
// 일반적인 반복문 ( for )
let arr = [1, 4, 5, 6, 9, 10 ,15 ,16]
let newarr = []

for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {     // 2의 배수
        newarr.push(arr[i])
    }
}
console.log(newarr)	// 4, 6, 10, 16

// 일반적인 반복문 ( while )
let arr = [1, 4, 5, 6, 9, 10 ,15 ,16]
let newarr = []
let i = 0;

while(i < arr.length){
   i++
    if(arr[i]%2 === 0){
       newarr.push(arr[i])
    }
}	// 4, 6, 10, 16

// forEach with arrow fuction
let arr = [3, 2, 4, 6, 7, 8]
let newarr = []
arr.forEach( (n) => { if (n % 2 === 0) newarr.push(n) })
console.log(newarr)	// 2, 4, 6, 8

일반적인 함수 사용법은 위와 같다.

이제보다 심화적으로 다룰것은 !고차함수

-일급객체, 고차함수에 대해 알아보자.

일급객체

    ✔일급객체
  • 프로그래밍 언어에서는 유독 특별한 취급을 받는 객체
  • - 루비와 파이썬에선 class를 일급객체로 다루지만 javascript에서는 함수가 일급객체로 다뤄진다.
  • 일급객체의 특징
  • - 변수에 할당할 수 있다.
    - 다른 함수의 인자로 전달될 수 있다.
    - 다른 함수의 결과로서 리턴될 수 있다.

고차함수

    ✔고차함수
  • 함수를 인자로 받거나 함수를 리턴하는 함수
  • 다른 함수(caller)의 인자로 전달되는 함수를 콜백 함수(callback function)라고 한다
  • caller는 조건에 따라 함수에 실행여부를 결정

1. 다른 함수를 인자로 받는 경우

  function add(num) {
  return num + 2;
}

 function addNum(func, num) {
  let addArr = [];
  return func(num);
}
// 함수 addNum은 다른 함수를 인자로 받는 고차 함수
// 함수 addNum의 첫 번째 인자 func에 함수가 들어올 경우
// 함수 func는 함수 addNum의 콜백 함수다
// 이 경우, 함수 add는 함수 addNum의 콜백 함수다

2. 함수 자체를 리턴하는경우

function double(added) {
  return function (num) {
    return num * added;
  };
}
  • 함수 double는 다른 함수를 리턴하는 고차 함수입니다.
  • double는 인자 한 개를 입력받아서 함수(익명 함수)를 리턴합니다.
  • double(5)는 함수이므로 함수 호출 연산자 '()'를 사용할 수 있습니다
  • ex) double(5)(4) // 20
  • 3. 두가지를 합쳐 이용하는 경우

    function add(num){
    return num + 3
    }
    
    function double(minus, func){
    let newadd = func(minus)
    return function(num){
    return num - newadd
     }
    }
    • 천천히 뜯어보자 ex) function (3, add)(5)
    • 먼저 (3, add) 작동이 된다. 3 + 3 = 6
    • 여기서 newadd = func(minus) 이기에
    • return되는 function(5) => 5 - 6이 작동되어 -1을 출력
      🔗 let fun = double(3, add) 이렇게 선언이 가능하며, fun(5) = -1 이런식으로도 사용가능

    0개의 댓글