겉핥기로 아는 것은 위험해보이는 부분이다.
익숙해지도록 노력하는게 제일인 것 같아 복습한 내용을 다시 복기한다.
const log = t=>console.log(t);
const reduce = (f, acc, iter) => {
if(!iter){
iter = acc[Symbol.iterator](); // iter가 없으므로 생성
acc = iter.next().value; // acc는 대체한다.
}
for(const cf of iter){
acc = f(cf, acc); // go의 경우 보통 함수를 넘기므로 cf로 이름을 변경
}
}
const go = (...args) => redu((cf, acc)=>cf(acc),args);
(cf, acc)=>cf(acc) 이 부분이 웃긴데 함수와 인자를 인자로써 넘기고
인자로 넘긴 함수에 인자를 넣어 함수를 실행시킨다.
이렇게 되면
for...of 문 내부에서 저 callback 함수가 실행되는데
acc = f(cf, acc)
에서 실행되게 된다.
이는 acc = (cf, acc)=>cf(acc)
이다.
첫 순회에서 acc = 0이고
cf는 a=>a+1이므로 (0은 reduce의 if문에 의해 이미 next 진행되어 없음)
0=>0+1 = acc가 된다.