그것은이다 발전기 기능.
생성기는 종료하고 나중에 다시 입력 할 수있는 기능입니다. 그들의 문맥 (가변 바인딩)은 재 입장에 걸쳐 저장 될 것입니다.
생성기 함수를 호출해도 본문이 즉시 실행되지는 않습니다. 대신 함수의 반복자 객체가 반환됩니다. 이터레이터의 next()
메소드가 호출되면 첫 번째 yield
표현식 까지 생성기 함수의 본문이 실행 됩니다.이 표현식은 반복자에서 리턴 될 값을 지정하거나 yield*
또는를 사용하여 다른 생성기 함수에 위임합니다.
역사적 메모 :
의 제안 된 구문입니다 EcmaScript.next
.
Mozilla의 Dave Herman은 EcmaScript.next 에 대해 이야기했습니다 . 시 30:15 그는 발전기에 대해 이야기합니다.
앞서 그는 모질라가 어떻게위원회를 운영 할 수 있도록 제안 된 언어 변경을 실험적으로 구현하고 있는지 설명했다. Dave는 Mozilla의 CTO 인 Brendan Eich (원본이라고 생각합니다) 및 원래 JavaScript 디자이너와 긴밀히 협력합니다.
EcmaScript 워킹 그룹 위키에 대한 자세한 내용은 http://wiki.ecmascript.org/doku.php?id=harmony:generators를 참조하십시오.
워킹 그룹 (TC-39)은 EcmaScript.next에 일종의 제너레이터 이터레이터 제안이 있어야한다는 일반적인 합의를 가지고 있지만 이것이 최종적인 것은 아닙니다.
다음 버전의 언어를 변경하지 않고이 표시에 의존해서는 안되며, 변경되지 않더라도 다른 브라우저에서는 한동안 널리 표시되지 않을 것입니다.
개요
일시 중단 된 실행 컨텍스트를 캡슐화하는 객체 (즉, 기능 활성화)로 표현되는 일류 코 루틴. 선행 기술 : Python, Icon, Lua, Scheme, Smalltalk.
예
피보나치 수의 "무한"순서 (약 2 53 )
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
루프에서 생성기를 반복 할 수 있습니다.
for (n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000)
break;
print(n);
}
생성기는 반복자입니다.
let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8
function*
v26부터 Firefox에서 구문이 지원됩니다 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. 이전 버전은 다른 구문을 사용했습니다.