让我们一起来学学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 }
全屏模式,退出全屏
这里到底发生了什么事?
yield
关键字在函数中起到暂停的作用。- 每次调用
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);
}
全屏模式,退出全屏
输出结果:
我是外在生成器 🌟
,我是内在生成器 🎯
回到外层生成器 勤 👋
全屏模式;退出全屏
为什么使用生成器 🤷♂️
- 惰性求值:仅在需要时生成值。
- 更好的性能:无需预先计算所有结果。
- 异步流程:与
async/await
结合使用,让异步代码更清晰易懂。
嘿!来考考你!🤔💡
生成器函数可以是异步的吗?如果可以,你通常怎么使用它?
在评论区写下你的答案,或者在你的代码里试一试!🧑💻
结束啦 🎉
生成器一开始可能看起来有点难懂,但通过一些练习,它们可以成为你 JavaScript 工具箱中的一个强大工具。从小尝试开始,探索它们的各种可能性,很快你就能像高手一样得心应手地使用它们啦!💪
你有有趣的生成器用例吗?下面评论区留言分享吧!快来分享你的想法吧!我们一起学习。🙌
加油!编程快乐!💻✨
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦