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()
메서드가 호출되고 생성기 함수의 본문이 첫 번째까지 실행됩니다.yield
expression - 반복기에서 반환되는 값을 지정합니다.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 |