>  기사  >  웹 프론트엔드  >  JavaScript_Basic 지식에서 Generator 및 Iterator 사용에 대한 간략한 토론

JavaScript_Basic 지식에서 Generator 및 Iterator 사용에 대한 간략한 토론

WBOY
WBOY원래의
2016-05-16 15:48:151056검색

제너레이터에 관해서라면 모두가 비동기와 같은 주제를 언급할 것입니다. 이것은 분명히 이상한 일로 인해 발생했습니다. Iterator는 Generator와 밀접한 관련이 있어야 합니다. Generator를 사용하여 비동기 처리를 처리하는 것은 일부 C# 프로그래머만 생각할 수 있는 일입니다. 물론 이 사용법에는 완전한 기능이 있지만 개인적으로 마음에 들지 않습니다.
Generator를 비동기식으로 연결해야 한다면 유일한 포인트는 다음에 호출하는 타이밍입니다. next는 비동기적으로 호출될 수 있기 때문에 Generator는 비동기적으로 남용될 수 있습니다.
하지만 다음 메서드는 비동기적으로 호출할 수 있지만 올바른 사용 방법은 동기적으로 호출해야 한다고 생각합니다. 최소한 Generator 인스턴스가 for-of 루프 또는 [...obj] 구조 분해에 사용되는 경우 next가 지속적으로 호출됩니다.
next의 동기 및 비동기 문제 외에도 next의 매개변수도 문제입니다. next가 호출될 때 전달된 매개변수는 항복 연산자의 반환 값으로 사용되므로 생성기에서는 이를 사용할 수 있는 더 다양한 방법이 있습니다. 초기 Python에서는 Yield가 연산자가 아닌 명령문이었기 때문에 그러한 사용법이 없었습니다. 이후 버전에서는 Yield를 연산자로 사용했기 때문에 다양한 함정이 나타났습니다.
Generator 인스턴스를 Iterator로 사용하는 경우 next는 비동기적으로 호출되지 않으며 next는 매개변수로 전달되지 않습니다. 나는 이것이 Generator의 올바른 사용법이라고 생각합니다. 또는 직설적으로 말하면 Generator는 Iterator를 구현하는 데 사용됩니다. 최소한 Generator라는 이름에는 다른 의미가 없습니다. 사용 예는 다음과 같습니다.
실행

<script>
var match = function * (pattern, string) {
 var regexp = new RegExp(pattern, 'g'); 
 for(let i; i = regexp.exec(string); yield i);
};

for(let i of match('a', 'abcabcabc')) {
 console.log(i);
}
</script>

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.