*평가란? → 코드가 계산되는것
*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
},
};
},
};