ES6 Generator生成器

Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”):

function * myFun() {
  console.log(1);
  yield 1;
  console.log(2);
  yield 2;
  console.log(3);
  yield 3;
}
const result = myFun();
console.log(result.next());
console.log(result.next());
console.log(result.next());
console.log(result.next());

输出:

ES6 Generator生成器

 Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行。

---------------------------------------------------------------------------------------------------------------------------------

Generator 函数实现ID生成器:

function* crateIdMaker() {
  let id = 1;
  while (true) {
    yield id++;
  }
}
const idMaker = crateIdMaker();
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
console.log(idMaker.next().value);
// 1
// 2
// 3
// 4
// 5
// 6

---------------------------------------------------------------------------------------------------------------------------------

Generator 函数实现可迭代接口:

const lists = {
  names: ['zs', 'ls', 'ww'],
  hobbies: ['sing', 'reading'],
  work: ['administration'],
  [Symbol.iterator]: function * () {
    const all = [...this.names, ...this.hobbies, ...this.work];
    for (const item of all) {
      yield item;
    }
  }
}
for (const item of lists) {
  console.log(item);
}

输出:

ES6 Generator生成器

 

上一篇:SB ,mybatis generator 插件 实现 删除操作


下一篇:IDEA14:maven快速排查依赖包冲突