JS에서 함수는?


*평가란? → 코드가 계산되는것

*1급이란? → 값으로 다룰수 있음 → 변수로 사용가능 → 함수의 인자로 사용 가능함

*JS에서 함수는 1급 객체임 → 함수를 값으로 다룰 수 있음

고차함수: 함수를 값으로 다루는 함수

클로저: 함수를 만들어 리턴하는 함수(중첩함수)

//함수가 함수로 리턴하는 함수
const f1 => () => () => 1

const f2 = f1();  // function

const f2(); // 1

// 함수가 인자로 함수를 받는 함수

const apply1 = (a) => a(1);
const add2 = (b) => b + 2;
log(apply1(add2)); // 3
log(aplly1(a => a -1)); // 0

// 클로저
const addMaker = (a) => (b) => a + b;
const f1 = addMaker(1);
const f2 = f1(2); // 3
const f3 = f1(3); // 4

이터러블/이터레이터 프로토콜

*이터러블에 관해: 이터러블 이터레이터 연구

//배열 [1,2,3]만들어보기;
const iterable = {
        [Symbol.iterator]() {
					let i = 3;
          return {
            next() {
              return i == 0 ? {done: true} : {value: i--, done: false};
            },
            [Symbol.iterator]() {
              return this; // 이터러블의 [Symbol.iterator]() 호출시 자기자신을 반환 하면 wellFoarmedIterator
            },
          };
        },
      };