为了账号安全,请及时绑定邮箱和手机立即绑定

让我们一起来学学JavaScript中的生成器吧 🚀

这个标题既通俗易懂,又符合中文的口语表达习惯。它简单直接地告诉读者文章的主题是关于学习JavaScript中的生成器,并且使用了流行的网络表情符号来增加趣味性。

嘿,JavaScript 爱好者们!👋 你们准备好让编程技能更上一层楼了吗?今天我们将探讨 生成器——JavaScript 中一种特殊的函数。别担心,这可不像火箭科学 🚀(但也差不多了!)让我们少说废话,直接进入正题。

此处省略

生成器是什么呢?🤔

简单讲,生成器是能够暂停并继续执行的函数。与普通函数从头执行到尾不同,生成器让你有更多的控制。

怎么做呢?通过使用function*语法和yield关键字。让我们来看一下它们是怎么用的吧!

这里省略了一些内容

编写你的第一个生成器函数 🛠️

function* 生成器1() {
  yield "你好 🌟";
  yield "生成器真棒!";
  yield "再见了 👋";
}

// 让我们来试一下吧!
const gen = 生成器1();

console.log(gen.next()); // { value: '你好 🌟', done: false }
console.log(gen.next()); // { value: '生成器真棒!', done: false }
console.log(gen.next()); // { value: '再见了 👋', done: false }
console.log(gen.next()); // { value: undefined, done: true }

全屏模式,退出全屏

这里到底发生了什么事?

  1. yield关键字在函数中起到暂停的作用。
  2. 每次调用gen.next()会将函数跳转到下一个yield,这样一来,当没有更多的yield语句时,生成器会返回{ done: true }

……

实际用例

1. 无限系列生成器 ♾️

有没有想过不占满内存就生成无限的数字?生成器来帮忙了!

    function* 生成无限数字() {
      let num = 1;
      while (true) {
        yield num++;
      }
    }

    const numbers = 生成无限数字();

    console.log(numbers.next().value); // 1
    console.log(numbers.next().value); // 2
    console.log(numbers.next().value); // 3
    // 以此类推...

全屏 退出全屏

2. 数据抓取的受控迭代 📡

需要分批获取数据或懒加载某些内容吗?生成器可以帮到你

    function* 按块获取(dataArray) {
      for (let i = 0; i < dataArray.length; i += 2) {
        yield dataArray.slice(i, i + 2);
      }
    }

    const 块数组 = 按块获取([1, 2, 3, 4, 5, 6, 7, 8]);

    console.log(块数组.next().value); // 输出 [1, 2]
    console.log(块数组.next().value); // 输出 [3, 4]
    console.log(块数组.next().value); // 输出 [5, 6]

    // 这个函数用于按每两个元素为一组的方式获取数据块

切换到全屏模式 退出全屏

此处省略内容
此处内容省略


关于委托生成器的乐趣 🤹‍♀️

生成器可以用 yield* 调用其他生成器。让我们让它们一起工作:

    function* 内层生成器() {
      yield "我是内层生成器 🎯";
    }

    function* 外层生成器() {
      yield "我是外层生成器 🌟";
      yield* 内层生成器();
      yield "回到外层生成器👋,再见!";
    }

    const gen = 外层生成器();

    对于gen中的每个value {
      控制台输出(value);
    }

全屏模式,退出全屏

输出结果:

    我是外在生成器 🌟  
    ,我是内在生成器 🎯  
    回到外层生成器 勤 👋  

全屏模式;退出全屏


为什么使用生成器 🤷‍♂️
  1. 惰性求值:仅在需要时生成值。
  2. 更好的性能:无需预先计算所有结果。
  3. 异步流程:与 async/await 结合使用,让异步代码更清晰易懂。

嘿!来考考你!🤔💡

生成器函数可以是异步的吗?如果可以,你通常怎么使用它?

在评论区写下你的答案,或者在你的代码里试一试!🧑‍💻


结束啦 🎉

生成器一开始可能看起来有点难懂,但通过一些练习,它们可以成为你 JavaScript 工具箱中的一个强大工具。从小尝试开始,探索它们的各种可能性,很快你就能像高手一样得心应手地使用它们啦!💪

你有有趣的生成器用例吗?下面评论区留言分享吧!快来分享你的想法吧!我们一起学习。🙌

加油!编程快乐!💻✨

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消