JavaScript Generators 迭代器
迭代器
JS 中迭代器是指包含 next 方法的对象, next 方法返回一个包含 value 和 done 键值的对象。
a.next() // {value: 1, done: false} a.next() // {value: 2, done: false} a.next() // {value: undefined, done: true}
生成器
生成器 是 一种类型的迭代器, 生成器函数返回一个生成器对象,这个对象是可迭代的
function * genFunction() {
yield 1;
}
const g = genFunction()
g.next() // value: 1, done: false
g.next() // value: undefined , done: true
自定义迭代器
const customIterator = {
[Symbol.iterator]: function * () {
let i = 0;
while(i++ < 10) {
yield i
}
}
}
利用 [Symbol.iterator] 我们可以实现直接的迭代对象,该对象可以通过 for ... in...
进行遍历
yield 传值
当我们在生成器对象 next 方法传入参数时,当前的 yield 会变成我们传入的参数
function * listener() { while(true) { let msg = yield console.log(msg) } } let l = listener() l.next(1) // 1 l.next(2) // 2
纤程
纤程 是 更小的线程,在 JS 中,可以通过 generator 实现纤程的效果
惰性求值
利用 yield 结合 无限循环, 我们可以通过其他函数调用生成器函数,生产我们想要的值。实际上函数内部使用了 while(true)
的语法,但是执行线程不会进入死循环,十分的有趣。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论