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 |