Generator函数学习笔记

Generator 函数是 ES6 提供的一种异步编程解决方案。
Generator 函数可以理解为是一个状态机,封装了多个内部状态。
也可以理解为是遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

执行时机

function* gen(){
    console.log('执行了')
}
gen();//cosole.log()并未执行

与普通函数不同的是,直接调用gen函数,里面的代码并未执行。
作为generator函数,需调用next方法才会执行,如下:

function* gen(){
    console.log('执行了')
}
let g = gen();
let next = g.next();

console.log(g);//{}
console.log(next);//{ value: undefined, done: true }

暂停标记

yield表达式是暂停执行的标记,而next方法可以恢复执行。
注意:yield表达式是暂停标记,不是yield。【PS:以前我以为是后者,越看越懵】

function* gen(){
    console.log('执行了')
    yield 'hello';
    console.log('hello之后执行');
    yield 'world';
}
let g = gen();
let next = g.next();
console.log(next)
//执行了
//{ value: 'hello', done: false }

从上述代码看出,第二行代码执行了,console.log显示出value的值。显然执行了yield 'hello'这个表达式后,暂停执行。
next方法返回一个对象,它的value属性就是当前yield表达式的值hellodone属性的值false,表示遍历还没有结束。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 基本概念 Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。Genera...
    oWSQo阅读 526评论 0 2
  • 在此处先列下本篇文章的主要内容 简介 next方法的参数 for...of循环 Generator.prototy...
    醉生夢死阅读 1,463评论 3 8
  • Generator 函数的语法 简介 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语...
    站在大神的肩膀上看世界阅读 4,211评论 0 6
  • 简介 基本概念 Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍...
    呼呼哥阅读 1,097评论 0 4
  • C++模板和泛型程序设计 泛型程序设计(generic programming)是一种算法在实现时不指定具体要操作...
    Ivan_Lan阅读 336评论 0 0