javascript 언어 확장:대상 교체 가능(3)
4377 단어 JavaScriptreturnyield생 성기
키워드 yield 를 사용 하 는 모든 함수(yield 가 코드 논리 에서 불가능 하 더 라 도)를'생 성기 함수'(generator function)라 고 부 르 며,생 성기 함 수 는 yield 를 통 해 값 을 되 돌려 줍 니 다.이 함수 들 은 return 을 통 해 함수 의 실행 을 중지 할 수 있 으 며,어떠한 반환 값 도 가지 고 있 지 않 지만,return 을 사용 하여 값 을 되 돌려 줄 수 없습니다.그러나 일반 함수 와 마찬가지 로 생 성기 함수 도 키워드 function 을 통 해 설명 하고 type:of 연산 자 도'function'으로 돌아 가 며 Function.prototype 에서 속성 과 방법 을 계승 할 수 있 습 니 다.요점 은:생 성기 함수 호출 은 생 성기 함수 의 함수 체 를 실행 하지 않 고 생 성기 대상 을 되 돌려 줍 니 다!생 성기 대상 은 다음 yield 문 구 를 만 날 때 까지 next()방법 을 포함 하고 있 습 니 다.이 때 생 성기 함수 의 yield 문장의 매개 변 수 는 next()방법의 반환 값 입 니 다.생 성기 함수 가 return 을 실행 하거나 함수 체 의 끝 에 도착 하면 next()는 StopIteration 을 던 집 니 다.
function r(min,max){
for(let i = Math.ceil(min);i <= max;i++)
yield i*i;
}
for(let n in r(1,10))
console.log(n);
생 성 기 는 close()방법 을 포함 하고 호출 할 때 관련 생 성기 함수 가 실행 을 중지 합 니 다.마치 함수 가 실행 되 는 위치 에서 return 문 구 를 실행 하 는 것 과 같 습 니 다.현재 걸 려 있 는 위치 가 하나 이상 의 try 구문 블록 에 있다 면 먼저 finally 종 구 를 실행 하고 close()를 실행 하고 돌아 갑 니 다.close()는 반환 값 이 없 지만 finally 에 이상 이 생기 면 이 이상 은 close()에 전 파 됩 니 다.
생 성기 대상 은 send 방법 도 포함 되 어 있 습 니 다.매개 변 수 를 가 져 올 수 있 습 니 다.이 값 은 yield 표현 식 의 값 이 될 것 입 니 다.(yield 를 구문 이나 함수 로 보면 이 매개 변 수 는 구문 이나 함수 의 반환 값 입 니 다)next()와 send()를 제외 하고 throw()방법 이 있 습 니 다.이 방법 을 호출 하면 yield 표현 식 은 인 자 를 throw()에 이상 하 게 던 집 니 다.다음 코드 를 참조 하 십시오.
function cf(init){
let next_v = init;
while(true){
try{
let inc = yield next_v;
if(inc)
next_v += inc;
else
next_v++;
}
catch(e){
if(e === "reset")
next_v = init;
else
throw e;
}
}
}
var c = cf(10);
console.log(c.toString());
console.log(c.next());
console.log(c.send(10));
console.log(c.throw("reset")); //next_v == 10;
console.log(c.next());
// reset
c.reset = function(){
return this.throw("reset");
}
/*but Generator is not defined!!!
!!!
Generator.prototype.reset = function(){
return this.throw("reset");
}
*/
console.log(c.reset());
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.