it-source

JavaScript에서 "function*"란 무엇입니까?

criticalcode 2023. 2. 2. 21:09
반응형

JavaScript에서 "function*"란 무엇입니까?

페이지에서 새로운 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;
    }
}

나는 이미 무엇을 알고, 무엇을 하는지 알고 있지만, 그것이 무엇인지 전혀 모른다.function*인연이야.그것은 무엇일까요?

P.S. 구글에 접속하지 마세요.아스터리스크로 표현을 검색할 수 없습니다(플레이스홀더로 사용됩니다).

발전기 기능입니다.

제너레이터는 종료했다가 나중에 다시 입력할 수 있는 기능입니다.콘텍스트(변수 바인딩)는 재엔트리에 걸쳐 저장됩니다.

생성기 함수를 호출해도 본문이 즉시 실행되지 않고 함수의 반복기 개체가 대신 반환됩니다.반복자의 경우next()메서드가 호출되고 생성기 함수의 본문이 첫 번째까지 실행됩니다.yieldexpression - 반복기에서 반환되는 값을 지정합니다.yield*, 다른 제너레이터 기능으로 이동합니다.


이력 메모:

이것은 에 대해 제안된 구문입니다.EcmaScript.next.

Mozilla의 Dave Herman이 다음에 EcmaScript.에 대해 이야기했습니다.30시 15분에 는 발전기에 대해 이야기한다.

앞서 그는 Mozilla가 위원회를 이끌기 위해 제안된 언어 변경을 어떻게 실험적으로 구현하고 있는지를 설명했다.Dave는 Mozilla의 CTO인 Brendan Eich 및 오리지널 JavaScript 디자이너와 긴밀히 협력하고 있습니다.

자세한 내용은 EcmaScript 작업 그룹 wiki에서 확인할 수 있습니다.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*유형은 반복할 수 있는 프로세스의 생성기 함수 역할을 하는 것처럼 보입니다.C#에는 '수익률'을 사용하여 이와 같은 기능이 있습니다.1과 2를 참조해 주십시오.

기본적으로 이 함수를 반복하는 모든 것에 대해 각 값을 하나씩 반환합니다. 따라서 사용 사례에서 이 값을 foreach 스타일 루프에 표시합니다.

재개하는 간단한 예

It's a function generator, see the example below
function* generator(i) {
  yield i;
  yield i + 10;
}

const gen = generator(10);

console.log(gen.next().value);
// expected output: 10

console.log(gen.next().value);
// expected output: 20

문서: MDN

언급URL : https://stackoverflow.com/questions/9620586/what-is-function-in-javascript

반응형