从
this question I asked before
我知道了
for...of
期望iterable,它是
实现
@@iterable
方法,这意味着对象(或其原型链上的一个对象)必须具有具有
@@iterator
通过常量提供的密钥
Symbol.iterator
所以,iterable看起来像这样:
const iterableObject: {
[Symbol.iterator]: function someIteratorFunction() {
//...
}
}
另一方面,我们有发电机,看起来像这样:
function* generatorFoo(){
yield 1;
yield 2;
yield 3;
yield 4;
}
可用于
为了……
结构如下:
for(const item of generatorFoo())
console.log(item);
所以,呼唤
generatorFoo()
返回iterable自
为了……
处理起来没问题。我也可以打电话
generatorFoo()[Symbol.iterator]()
并接收一个迭代器来确认这一点。
但是,打电话
generatorFoo
也会返回迭代器,因为我可以调用
GeneratorFoo()
我用一种方法得到一个物体
next
要获取迭代器的下一个值,如下所示:
const iteratorFromGen = generatorFoo();
iteratorFromGen.next().value; //1
iteratorFromGen.next().value; //2
iteratorFromGen.next().value; //3
iteratorFromGen.next().value; //4
这是否意味着调用生成器函数返回一个可以访问
下一个
方法
和
一
[Symbol.iterator]
方法?
当调用一个生成器函数时,我们是否得到一个既是迭代器又是iterable的对象?这是怎么做到的?