ES6에서 generator 함수

1824 단어
기본 개념
generator 함수는 주로 비동기 프로그래밍 문제를 해결하고,
특징 (형식적)
function과 함수 이름 사이에는 "*"가 있고 함수 내부에는 다음과 같은 yield 표현식이 있습니다.
function * helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

var hw = helloWorldGenerator();

generator 함수 호출은 역행기 대상의 next 방법을 호출해야 합니다.next 방법을 호출할 때마다 내부 바늘은 함수 머리나 지난번에 멈춘 곳부터 실행됩니다. 다음 yield 표현식이 나타날 때까지 다음과 같습니다.
hw.next()
// { value: 'hello', done: false }

hw.next()
// { value: 'world', done: false }

hw.next()
// { value: 'ending', done: true }

hw.next()
// { value: undefined, done: true }
next 방법은 사실 수동으로generator를 호출하여 훑어보는 방법이다. for...of 문장을 사용하면 실습을 통해 자동으로 훑어볼 수 있다. 다음과 같다.
function * foo(){
    yield 1;
    yield 2;
)
for(var a of foo()){                                   
    console.log(a);                          //1,2
}

next 함수의 매개 변수 문제
yield 표현식 자체는 반환 값이 없지만 next 방법은 하나의 매개 변수를 가져올 수 있다. 이 매개 변수는 이전 yield 표현식의 반환 값으로 여겨진다. 여기서 완일봉 대장부의 예를 인용한다.
function* f() {
  for(var i = 0; true; i++) {
    var reset = yield i;
    if(reset) { i = -1; }
  }
}

var g = f();

g.next() // { value: 0, done: false }
g.next() // { value: 1, done: false }
g.next(true) // { value: 0, done: false }

위 코드는 무한히 실행할 수 있는Generator 함수 f를 정의했습니다. 만약next 방법에 매개 변수가 없으면 yield 표현식에 실행될 때마다 변수reset의 값은 항상 undefined입니다.next 방법이 매개 변수true를 가지고 있을 때 변수reset은 이 매개 변수(즉true)로 리셋됩니다. 따라서 i는 -1과 같고 다음 순환은 -1부터 점차적으로 증가합니다.
이 기능은 매우 중요한 문법적 의의를 가지고 있다.Generator 함수는 정지 상태에서 실행 재개까지 상하문 상태 (context) 는 변하지 않습니다.next 방법의 매개 변수를 통해Generator 함수가 실행되기 시작한 후에 함수체 내부에 값을 계속 주입하는 방법이 있습니다.즉, Generator 함수가 실행되는 단계에 따라 외부에서 내부로 서로 다른 값을 주입하여 함수 행위를 조정할 수 있다.

좋은 웹페이지 즐겨찾기