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 belowfunction* 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
'it-source' 카테고리의 다른 글
| 제한 글로벌 없음 (0) | 2023.02.02 |
|---|---|
| PHP 클래스 컨스트럭터가 부모 컨스트럭터를 호출하려면 어떻게 해야 합니까? (0) | 2023.02.02 |
| SSL/TLS 보호를 위해 openssl 확장이 필요합니다. (0) | 2023.02.02 |
| 작곡가에게 포크를 어떻게 요구합니까? (0) | 2023.02.02 |
| 항상 소수점 2자리를 표시하는 형식 번호 (0) | 2023.02.02 |