ECMAScript Generator
그것은 하나의 상태기로서 내용이 여러 가지 상태가 있다.
generator 함수를 실행하면 캐리어 대상을 되돌려줍니다. 서로 다른 상태를 얻을 수 있습니다.
구문:
function* 이름() {
yield 표현식 되돌리기;
}
두 가지 특징이 있습니다.
1funcion 키워드 뒤에 추가됨*
2 내부 yield 사용법
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
호출할 때 함수를 실행하지 않고 내부 상태를 가리키는 바늘 대상을 되돌려줍니다.hw.next () 는 상태를 훑어보고 되돌아오는 값을 가져옵니다.
대상value는 반환값을 표시하고, done는 반복이 끝났는지 여부를 표시합니다.
물론generator는 매개 변수가 있을 수 있고 함수도 있기 때문에 함수의 모든 특징이 있다.
function*generator () {console.log ('a');//yield를 만나면 실행 후를 멈추고 yield 후의 표현식 값을 값으로 되돌려 yield'a',//다음 next 때 yeild 후의 것을 계속 실행합니다. 다음 yield console.log ('b'),/yield 후의 표현식은 next 포인터가 가리키는 것을 호출할 때만 실행됩니다. yield'b', console.log ('c');//만약 yield가 없으면return까지 실행하고 return 후의value로 사용합니다.//return이 없으면value는undefined return'c';//return은 마지막 상태를 표시합니다}//호출된 함수는 실행되지 않으며 결과//가 아니라 내부 상태의 바늘 대상으로next(XX)를 통해 상태와 전달 값을 이동합니다.//상태는 yield를 통해 설정됩니다. 이것은 정지된 표시입니다.next는 실행을 복구하는 데 사용됩니다.var hw=generator();//next () 출력의 대상value는yeildXX의 값을 표시하고,done는 첫 번째 next를 끝낼지//끝낼지 여부를 표시합니다. 함수 첫 줄부터 첫 번째 yield console까지 실행합니다.log(hw.next()); console.log('-----------------') console.log(hw.next()); console.log('-----------------') console.log(hw.next());
yield:
넥스트 () 를 호출해야만 다음 내부 상태를 훑어볼 수 있습니다.
그래서 사실상 실행을 멈출 수 있는 함수를 제공했다.
yield
문장은 정지 표지이다.캐리어 대상의
next
방법의 운행 논리는 다음과 같다.(1)
yield
문장을 만나면 다음 동작을 잠시 멈추고 yield
뒤에 있는 표현식의 값을 되돌아오는 대상의 value
속성 값으로 합니다.(2) 다음 호출
next
방법은 다음 yield
문장이 나타날 때까지 계속 아래로 실행합니다.(3) 새로운
yield
문장이 없으면 함수가 끝날 때까지 return
문장을 실행하고 return
문장 뒤에 있는 표현식의 값을 되돌아오는 대상의 value
속성 값으로 한다.(4) 이 함수에
return
문장이 없으면 반환된 대상의 value
속성 값은 undefined
입니다.다음 표현식은next를 호출할 때만 실행되고 되돌아옵니다.첫 번째next는 함수 꼭대기부터 첫 번째 yield까지 실행됩니다.
Generator 함수는
yield
문장을 사용하지 않아도 되는데, 이때 단순한 실행 유예 함수가 되었다.Iterator 인터페이스와의 관계
이전 장에서 말했듯이 임의의 대상
Symbol.iterator
방법은 이 대상의 트랙터 생성 함수와 같고, 이 함수를 호출하면 이 대상의 트랙터 대상을 되돌려줍니다.Generator 함수는 트랙터 생성 함수이기 때문에Generator를 대상의
Symbol.iterator
속성에 값을 부여하여 이 대상에Iterator 인터페이스를 가지게 할 수 있습니다.var myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable] // [1, 2, 3]
next 방법의 매개 변수§⇧
yield
문 자체가 되돌아오는 값이 없거나 항상 되돌아온다undefined
.next
방법은 하나의 매개 변수를 가지고 있을 수 있으며, 이 매개 변수는 이전 yield
문장의 반환값으로 간주된다.function* f() {
for(var i=0; true; i++) {
var reset = yield i;
if(reset) { i = -1; }
}
}
var g = f();
g.next() // { value: 0, done: false } g.next() // { value: 1, done: false } g.next(true) // { value: 0, done: false }
next()는 함수에 값을 전달할 수 있습니다.변수에 yield를 부여할 수 있습니다. 그러면 변수는next가 다음에 호출할 때 전달할 값을 얻을 수 있습니다.
for...of 순환
for...of
순환은Generator 함수를 자동으로 훑어볼 수 있으며, 이 때 next
방법을 호출할 필요가 없습니다.function *foo() {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
return 6;
}
for (let v of foo()) {
console.log(v);
} // 1 2 3 4 5
앞부분에서 소개한 적이 있는데,
for...of
루프, 확장 연산자(
...
), 부호 및
Array.from
방법 내부에서 호출된 것은 모두 캐리어 인터페이스이다.이것은 Generator 함수를 매개 변수로 되돌릴 수 있다는 것을 의미합니다.
[...numbers()] // [1, 2]
Array.from(numbers()) // [1, 2]
g.return(val)
주어진 값을 되돌려주고 Generator 함수를 끝낼 수 있습니다.
yield *
//generator에서 다른generator 함수를 호출합니다.//용법yield*Gen()///다른 generator를 만났을 때 실행합니다. 실행이 끝난 후에 원래의generator varr=[1,2,3,4,5,[6,7,8]]에 추가합니다.function* generator(a){ var len=a.length; for(var i=0;i
//generator는 aax에//를 적용하여 aax 리셋에서next를 호출하여 값을 전달할 수 있습니다.//이렇게 하면 yield 후의 코드를 실행할 수 있습니다.//그리고result는 aax의 결과를 얻을 수 있습니다.처리하다.var request=require('request'); function* main(){ var result=yield request('http://www.baidu.com',function(err,res,body){ it.next(body); }) console.log(result); } var it=main(); it.next();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.