生成器是一种惰性的序列
,它支持一边读取数据,一边生成数据(有没有想到小学数学蓄水池问题哈哈哈哈),如果数据比较大时,这种机制能节省很多内容空间。JavaScript 在 ES6 标准中也新增了对生成器的支持。
/*
生成器的构造是用函数来包装,但是我们应该把下例看成是一个 [1,2,3,4,5] 的序列,而不是一个函数
*/
function* f() {
for (let i = 0; i < 5; i++) {
yield i // 返回并记录函数状态
}
}
var f = f()
console.log(f.next()) // { value: 0, done: false }
console.log(f.next()) // { value: 1, done: false }
console.log(f.next()) // { value: 2, done: false }
console.log(f.next()) // { value: 3, done: false }
console.log(f.next()) // { value: 4, done: false }
console.log(f.next()) // { value: undefined, done: true }
/*
每调用一次 next,就执行一次 yield | 依靠这种需要才生产的工作机制,大大的节省资源
*/