그래서 배열에서 값을 반환해야하는 생성기 함수가 있지만 배열에 생성기의 출력을 소비하는 동일한 루프가 채워지는 상황이 있습니다.반복 중에 기본 컬렉션에 추가되는 경우 배열 반복기의 동작이 정의됩니까?
특정 시나리오는 자동 디코딩 된 문자가 암호 키의 끝에 추가되는 autokey 암호에 대한 키 시퀀스를 반환하는 생성기입니다. 내 구현은 작동하지만 작동 여부가 확실하지 않거나 정의되지 않은 동작의 예가 부탁하는 경우 확실하지 않습니다.
기본적으로 아래 코드는 항상 "a", "b", "c", "d", "e"를 인쇄하거나 "a", "b" "c", "undefined", "undefined"? 반복되는 컬렉션을 수정하는 것에 대해서는 항상 염려 스럽습니다.
let a = ["a", "b", "c"];
let iter = function*() { yield* a; }();
console.log(iter.next().value); // "a"
console.log(iter.next().value); // "b"
a.push("d");
a.push("e");
console.log(iter.next().value); // "c"
console.log(iter.next().value); // "d" - but is this guaranteed?
console.log(iter.next().value); // "e" - or is it?
편집는 : 카일 심슨에 의해, "반복자는"더 정확하게 넘어 ES6 &에 따라 질문
제너레이터 시작 부분에 복사본을 작성한 다음 사본에 'yield *'를 만들어야한다고 생각합니다. – user949300
예, ES6은 모든 콜렉션이 변이를 처리 할 수 있도록'@@ iterator()'의 동작을 지정합니다. – Bergi