语法: function* 函数名(){} -> 在普通的函数后面加上 *

说明:
  • 当遇到 yield 关键字的时候函数就会暂停执行
  • 需要把生成器的执行结果保存到变量里
  • 手动控制 .next() 让函数什么时候继续往下执行

function* fn() {
    yield console.log(1);
    yield console.log(2);
    yield console.log(3);
    let a = yield 0;
    console.log(a);  // 参数
}

let n = fn();  // 一定要存储
n.next();  // 执行第一个暂停代码
n.next();  // 执行第二个暂停代码
n.next();
n.next();
n.next('参数');

  • 通过 for of 循环可以获取生成器中的所有值

function* fn() {
    yield 1;
    yield 2;
    yield 3;
}

let n = fn();  // 一定要存储

for (let v of n) {
    console.log(v)
}