iterable이 iterator와 동일합니까, 아니면 다른가요?
보인다 사양에서 가 반복 가능한 객체, 말,이다, obj
등 obj[Symbol.iterator]
, 호출 할 때 너무 함수를 참조하는 가진 개체를 반환 next
반환 할 수 있습니다 방법 {value: ___, done: ___}
개체를 :
function foo() {
let i = 0;
const wah = {
next: function() {
if (i <= 2) return { value: (1 + 2 * i++), done: false }
else return { value: undefined, done: true }
}
};
return wah; // wah is iterator
}
let bar = {} // bar is iterable
bar[Symbol.iterator] = foo;
console.log([...bar]); // [1, 3, 5]
for (a of bar) console.log(a); // 1 3 5 (in three lines)
위의 코드 bar
에서 반복 가능 wah
하고 반복자이며 next()
반복자 인터페이스입니다.
따라서 iterable과 iterator는 서로 다릅니다.
그러나 이제 일반적인 생성기 및 반복기 예제에서 :
function* gen1() {
yield 1;
yield 3;
yield 5;
}
const iter1 = gen1();
console.log([...iter1]); // [1, 3, 5]
for (a of iter1) console.log(a); // nothing
const iter2 = gen1();
for (a of iter2) console.log(a); // 1 3 5 (in three lines)
console.log(iter1[Symbol.iterator]() === iter1); // true
위의 경우 gen1
생성기이며 iter1
반복기이며 iter1.next()
올바른 작업을 수행합니다. 그러나 iter1[Symbol.iterator]
호출 될 때 iter1
반복 하는 함수를 제공 합니다. 그래서 iter1
모두는 반복 가능하고 반복자이 경우에?
또한, iter1
실시 예 1에서 줄 수있는 반복 가능하기 때문에, 위의 예 1과 다른 [1, 3, 5]
사용하여 원하는만큼 여러 번 [...bar]
하면서, iter1
반복 가능하지만,이 같은 반복자 때마다, 이는 자체를 반환하기 때문에 만 줄 것이다 [1, 3, 5]
번.
그래서 우리는 iterable bar
에 대해 몇 번이나 [...bar]
결과를 줄 수 있는지 말할 수 있습니다 [1, 3, 5]
. 그리고 iterable과 iterable이 동일합니까? 그리고 대답은, 그것들은 다른 것들이지만, iterable이 자체를 반복자로 사용할 때 그것들은 동일 할 수 있습니다. 그 맞습니까?
iter1
이 경우 반복자 반복 가능하고 둘 다? "- 예. 모든 네이티브 반복자는 자신을 반환하여 반복 가능하므로 반복 가능을 기대하는 구문으로 쉽게 전달할 수 있습니다.