JavaScript Generators 迭代器

发布于 2023-10-10 01:42:25 字数 1110 浏览 27 评论 0

迭代器

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

一杆小烟枪

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

金兰素衣

文章 0 评论 0

ゃ人海孤独症

文章 0 评论 0

一枫情书

文章 0 评论 0

清晰传感

文章 0 评论 0

mb_XvqQsWhl

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文