Generator应该被称为迭代生成器,涉及的概念:

Generator函数的作用是

例如:

function* test() {
    yield 1
    yield* [1, 2]
}
const result = test()

test为Generator函数,result为返回的迭代器对象,yield为执行暂停关键词。

ES6中,默认内置迭代器对象的类型有String,Array,TypedArray,Map 和 Set 都内置可迭代对象,因为它们的原型对象都有一个 Symbol.iterator 方法。:

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1
    yield 2
    yield 3
}

for (let k of myIterable) {
    console.log(k)  // 1, 2, 3
}

yield*可以暂停执行另一个拥有迭代器的对象,例如:

function* test() {
    yield 1
}

function* test2() {
    yield* test()
}
const result = test2()
result.next()
// {value: 1, done: false}

参考