제네레이터와 이터레이터

dorazi·2022년 8월 2일
post-thumbnail

이터레이터

이터러블 : 이터레이터를 리턴하는 [Symbol.iterator]() 를 가진 값
이터레이터: { value, done } 객체를 리턴하는 next() 를 가진 값
이터러블 / 이터레이터 프로토콜 : 이터러블을 for...of, 전개 연산자 등과 함께 동작하도록한 규약

사용자 정의 이터러블

const iterable = {
	[Symbol.iterator]() {
    	let i = 3;
      	return {
        	next() {
            	return i == 0 ? { done : true } : { value : i--, done: false }
            }
        }
    }
}

let iterator = iterable[Symbol.iterator]();
console.log(iterator.next()) /// 3
console.log(iterator.next()) /// 2
console.log(iterator.next()) /// 1

제네레이터

이터레이터이자 이터러블을 생성하는 함수

function *gen() {
	yield 1;
  	yield 2;
  	yield 3;
  	return 100
}
let iter = gen();
log(iter[Symbol.iterator]() === iter) // true
log(iter.next()) /// { value : 1, done: false }
log(iter.next()) /// { value : 2, done: false }
log(iter.next()) /// { value : 3, done: false }
log(iter.next()) /// { value : 100, done: true }

for(const a of gen()) console.log(a) /// 1 2 3

제네레이터의 리턴값은 done : true 일때 나오는 값

profile
프론트엔드 개발자

0개의 댓글