🔧
function *gen() {
yield 1;
yield 2;
yield 3;
return 100;
}
let iter = gen();
log(iter[Symbol.iterator]() == iter) // true
log(iter.next()); // 1 false
log(iter.next()); // 2 false
log(iter.next()); // 3 false
log(iter.next()); // 100 true
for (const a of gen()) log(a)
// 1 2 3
🔧
// 넣은 숫자부터 무한 ++
function *infinity(i=0){
while(true) yield i++;
}
// l로 제한 iter가 받는 객체로 iter에 있는 a를 l만큼 반환시 멈춘다.
function *limit(l,iter){
for (const a of iter){
yield a;
if(a==l) return;
}
}
// l로 제한을 둔 만큼 홀수를 반환한다.
function *odds(l) {
for (const a of limit(l,infinity(1))){
if(a % 2) yield a;
}
}
let iter = odds(10);
log(iter.next()); // 1
.... // 3 5 7
log(iter.next()); // 9