12월 20일 복기

Ji Taek Lim·2020년 12월 20일

고차함수 이해하기

일급객체에 배웠다 다시 할당할 수 있는 함수


function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  let doubledArr = [];
  return func(num);
}



let output = doubleNum(double, 4);
console.log(output); // -> 8

여기는 펑션을 만들어 줬어

그리고 펑션을 만들어줬는데 펑션이랑 넘버랑 같이 있을거래
그래서 너네가 위에 가서 혼인하고 오렴하고 만들어준거야

근데 이 혼인한애들을 어떻게 입양을 보낼까 어떻게 해야되니까 이거를 한번 더 써준거지..

그리고 얘내들을 정의해줬어 output으로 이제 혼인신고같은거지

doubledArr=[]은 잘모르겟네.. 이거 너네 배열로 바꿔서 나와라 이거같은데


function adder(added) { // 1.(5)들어오면
  return function (num) { // 3.(3)들어오면
    return num + added; //2.(5)값 저장, 4.(3)값 연산하여 리턴.
  };
}

let output = adder(5)(3); // -> 8
console.log(output); // -> 8

얘를 보자 adder가 5랑 만나서 들어갔는데
난데없이 펑션이 한개 더 있음
그래서 이름모를 펑션이 하나 나왔음
근데 이 펑션이라는애가 5랑 3을 더해서 나오래
그러니까 adder가 5랑들어갔는데 들어간 펑션이 한번 더들어가서 3이랑 만나서 5랑 친구를 만든다음에 나와줘라 이렇게 된거야.
그러니까 미션을 2번하는거지.


function double(num) {
  return num * 2;
}

function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}

doubleAdder(5, double)(3); // -> 13

얘를 보자

얘는 위에 펑션이 하나가 정의되어있네

그리고 밑에 걸 보면

이거 펑션을 들어갔는데 adder랑 함수랑 같이 들어가래
들어가봤는데 너네둘이 합쳐서 doubled 라고 새로 커플을 맺어줄거래

그리고 결혼식은 위에 함수에 가서 하래 합쳐진다음에
또 한줄 넘어갔는데

알겠다라고 갔는데 또 펑션이 있네

얘가 가보니까 들어가서 애기가 있는대 얘를 입양해오래..
그래서 더블드 커플이 넘버를 입양해서 가서 3이서 같이 잘살았다는 이야기인데..

1+2 = 함수를 인자로 받고, 함수를 리턴하는 경우
함수 doubleAdder은 고차함수다.
함수 doubleAdder의 인자인 double함수는 콜백함수다.

이게 설명인데...
5가 added로 가는거고

어려우니까 디버거를돌려보았다.

그러니까 이거를 설명하자면
added가 5야 그리고 func가 double이잖아
상수를 정해주는거지
const doubled = double(5)가 되는거야
그리고 이거를 doubled로 정의해준다음에
함수를 하나더불러와서 num을 더해라가 되는거야
그러니까 13이 되는거지.

그러니까 1번은 혼인을 하는거고
2번은 5랑 들어갔는데 3이라는 애랑 같이 데리고 나와라이고
3번은 혼인을 해서 커플이 되었는데 3이랑 같이 나와라
이렇게 되는거지.
3번은 1번 2번을 합친거야.

First-class citizen (1등 시민)

내가 원하던 시민권을 찾았다.

얘네는 시민권이 있는애니까 좀 더 특별해 뭐 이런거겠지
사울이 로마 시민권자인것처럼..

그러니까 이거지 너네는 결혼했으니까 시민권 할당하고
새로 이름지어준다.. 뭐 이런 의미인듯..


// 아래는 변수 square에 함수를 할당하는 함수 표현식입니다.
// 자바스크립트에서 함수는 일급 객체이기 때문에 변수에 저장할 수 있습니다.

// 함수 표현식은 할당 전에 사용할 수 없습니다.
// square(7); // --> ReferenceError: Can't find variable: square

const square = function (num) {
  return num * num;
};

// square에는 함수가 저장되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
output = square(7);
console.log(output); // --> 49

What is higher order function?

아 이거는 스타워즈에 나오는 execute order 66;

극비 오더 제다이 마스터를 제거하라는 팰퍼틴의 심어준 오더같은 것이라고 할 수 있다.

마스터 오비완이 사실상 커맨더였지만 이 오더가 실행되면 트롬스투퍼가 제다이들을 제거하는 미션인거지..


function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  return func(num);
}

// 함수 doubleNum은 다른 함수를 인자로 받는 고차 함수입니다.
// 함수 doubleNum의 첫 번째 인자 func에 함수가 들어올 경우
// 함수 func는 함수 doubleNum의 콜백 함수입니다.
// 아래와 같은 경우, 함수 double은 함수 doubleNum의 콜백 함수입니다.
let output = doubleNum(double, 4);
console.log(output); // -> 8

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
profile
임지택입니다.

0개의 댓글