문제

페이지에서 새로운 JavaScript를 찾았습니다.기능 유형 :

// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13 

function* fibonacci() { // !!! this is the interesting line !!!
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev + curr];
        yield curr;
    }
}
.

이미 알고 있습니다 yield 및 < a> 무슨let는 의미합니다.그것은 무엇입니까?

[?,?]=[?,?] 및 < a> p.s.Google을 시도하는 것을 괴롭히지 말고 별표가있는 표현식을 검색 할 수 있습니다 ( 자리 표시 자로 사용됨 ).

도움이 되었습니까?

해결책

생성기 기능을 찍습니다.

발전기는 종료 될 수 있고 나중에 다시 입력 할 수있는 기능입니다. 그들의 컨텍스트 (가변 바인딩)는 다시 입구에 저장됩니다.

생성기 함수를 호출하면 즉시 본문을 실행하지 않습니다. 함수의 반복자 객체가 대신 반환됩니다. 반복자의 next() 메소드가 호출되면 발전기 기능의 본문은 Iterator에서 리턴 할 값을 지정하거나 yield를 사용하여 다른 Generator 기능으로 대표합니다.


역사적 주 :

yield*의 제안 된 구문입니다.

Dave Herman of Mozilla는 relinspript.next에 대해 이야기했습니다. 30:15 발전기에 대해 이야기합니다.

이전, 그는 Mozilla가 제안 된 언어 변경 사항을 실험적으로 구현하여위원회를 조종하는 데 도움이되는 방법을 설명합니다. Dave는 Brendan Eich, Mozilla의 CTO와 원래 JavaScript 디자이너와 긴밀히 협력합니다.

ECMAScript Wilk Wiki : http : // wiki.ecmascript.org/doku.php?id=harmony:Generators

워킹 그룹 (TC-39)은 ECMAScript.next가 어떤 종류의 발전기 반복기 제안서를 가져야한다는 일반적인 협정 을가집니다. 그러나 이것은 최종적이지 않습니다.

다음 버전의 언어로 변경되지 않고이 방법을 사용하지 않아야하며 변경되지 않더라도 다른 브라우저에 널리 표시되지 않을 것입니다.

개요

일시 중단 된 실행 컨텍스트 (즉, 기능 활성화)를 캡슐화하는 객체로 표현되는

일류 코트 인. 선행 기술 : 파이썬, 아이콘, 루아, 계획, Smalltalk.

예제

Fibonacci 수의 "무한"시퀀스 (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* 유형은 반복 할 수있는 프로세스에 대한 생성기 함수 역할을하는 것처럼 보입니다. C #은 "yield return" 1을 참조하십시오 2

본질적 으로이 기능을 반복하는 모든 값을 하나씩 반환합니다.이 기능을 반복합니다. 이는 유스 케이스가이를 위로 스타일 루프에서 보여줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top