본문 바로가기

ES6

generator

generator

- 함수이지만 일반 함수와는 다름

- function* 키워드로 시작함

- new 연산자를 사용할 수 없음

- return 구문은 한번만 실행되지만 yield 구문은 여러번 실행됨

- 호출해도 바로 실행되지 않고 멈춰진 제너레이터 객체를 리턴함

- generator 객체의 .next() 메소드를 호출할 때마다 다음번 yield구문에 닿을 때 까지 실행

- 첫번째 next()메소드에 인자를 넣으면 이 값은 무시됨

- yield* 키워드를 사용하면 해당 yield가 실행될때 iterable Object를 순회함



EX 1

 sports 함수를 호출해도 함수 내부 블록이 실행되지 않으며 제네레이터 객체를 리턴한다



EX 2

 next() 메소드를 호출할 때 실행된다



EX 3

 next() 메소드의 첫번째 인자 'first'는 무시되고 두번째 인자부터 바로 전 yield에 할당된다.



EX 4



EX 5



return()

- generator 함수의 iterator를 종료 시킴

- done : true 를 반환하고 패러미터 값이 있다면 value에 그 값을 반환함


EX 6



EX 7

 return()이 호출될 때 generator함수의 코두가 try/finally 안에 있으면 시퀀스 종료를 피할 수 있고, 이 경우 finally 블록의 yield 표현식이 실행된 이후 reutrn()에 전달한 패러미터 값으로 종료됨



throw()

- generator 함수에 error를 발생시키고 강제 종료 시킴

- generator 함수의 catch()문에서 error를 받을 수 있음


EX 8




for of 와 generator

- for문이 종료되면 generator가 close됨

- yield 키워드를 기반으로 반복함


EX 9



EX 10


'ES6' 카테고리의 다른 글

for of  (0) 2018.08.22
class  (0) 2018.08.16
object / arrow function / spread / rest / default  (0) 2018.08.12
let / const  (0) 2018.08.12