day86-生产者与迭代器

前言

假定你要产生一系列值,其中每个值都与前面一个有特定的关系。要实现这一点,需要一个有状态的生产者能够记住其生成的最后一个值。


生产者与迭代器(实现一个直接使用函数闭包的版本)

/**
* 数字序列生成器
*/
let gimmeSomething = (function () {
let nextVal
return function () {
if (nextVal === undefined) {
nextVal = 1
} else {
nextVal = (3 * nextVal) + 6
}
return nextVal
}
})()
注意这里console一个和多个是不一样的
console.log(gimmeSomething()) // 1
console.log(gimmeSomething()) // 9
console.log(gimmeSomething()) // 33

为数字迭代生成器生成标准的迭代器接口

迭代器是一个定义好的借口,用于从一个生产者一步步得到一系列值。
JavaScript 迭代器的接口,与多数语言类似,就是每次想要从生产者得到下一个值的时候调用next()

let something = (function () {
let nextVal
return {
// for...of循环需要
[Symbol.iterator]: function () { return this },
// 标准迭代器接口方法
next: function () {
if (nextVal === undefined) {
nextVal = 1
} else {
nextVal = (3 * nextVal) + 6
}
return { done: false, value: nextVal }
}
}
})()
console.log(something.next().value) // 1
console.log(something.next().value) // 9

参考

引自:《你不知道的JavaScript - 中》

文章作者: lmislm
文章链接: http://lmislm.com/2019/04/07/2019-04-07/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog