ES6学习笔记-生成器-Generators
生成器函数与普通函数的区别如下:
- 使用 function* 声明
- 有一种类似 return 的语法:关键字 yield。不同的是普通函数只可以 return 一次,而生成器函数可以 yield 多次;在执行过程中,yield 表达式可以暂停,后续可随时恢复执行状态,而普通函数不能子暂停。
该函数的调用过程如下:function* quips(name) { yield "你好 " + name + "!"; yield "希望你能喜欢这篇介绍ES6的译文"; if (name.startsWith("X")) { yield "你的名字 " + name + " 首字母是X,这很酷!"; } yield "我们下次再见!"; }
从以上过程可以看出:> var iter = quips("jorendorff"); [object Generator] > iter.next() { value: "你好 jorendorff!", done: false } > iter.next() { value: "希望你能喜欢这篇介绍ES6的译文", done: false } > iter.next() { value: "我们下次再见!", done: false } > iter.next() { value: undefined, done: true }
- 生成器函数每次调用
.next()
方法时,都会返回一个已暂停的生成器对象,类似于一次函数调用,只不过暂停了。 - 当遇到 yield 函数暂停时,会产生 value,类似于普通函数的 return,另外还有一个 done 值,用来标志生成器函数是否到达了末尾
- 生成器函数永不并发,它拥有确定的执行顺序