【ES6复习笔记】生成器(11)

embedded/2024/12/28 2:09:49/

什么是生成器函数

生成器函数是一种特殊的函数,它可以在执行过程中暂停并保存当前状态,然后在需要时恢复执行。生成器函数通过 yield 关键字来实现暂停和恢复执行的功能。

生成器函数的基本用法

  1. 定义生成器函数:使用 function* 关键字来定义生成器函数
  2. 使用 yield 关键字:在生成器函数中使用 yield 关键字来返回一个值,并暂停函数的执行。
  3. 创建迭代器对象:通过调用生成器函数来创建一个迭代器对象。
  4. 使用 next() 方法:使用迭代器对象的 next() 方法来恢复生成器函数的执行,并获取下一个值。

生成器函数实例

实例 1:基本的生成器函数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>生成器</title>
</head>
<body><script>javascript">// 生成器函数function* gen() {yield '一只没有耳朵';yield '一只没有尾巴';yield '真奇怪';}// 创建迭代器对象let iterator = gen();// 使用 next() 方法获取值console.log(iterator.next()); // { value: '一只没有耳朵', done: false }console.log(iterator.next()); // { value: '一只没有尾巴', done: false }console.log(iterator.next()); // { value: '真奇怪', done: false }console.log(iterator.next()); // { value: undefined, done: true }</script>
</body>
</html>

实例 2:使用生成器函数实现异步操作

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>生成器函数实例</title>
</head>
<body><script>javascript">// 模拟异步获取数据function getUsers() {setTimeout(() => {let data = '用户数据';iterator.next(data);}, 1000);}function getOrders() {setTimeout(() => {let data = '订单数据';iterator.next(data);}, 1000);}function getGoods() {setTimeout(() => {let data = '商品数据';iterator.next(data);}, 1000);}// 生成器函数function* gen() {let users = yield getUsers();let orders = yield getOrders();let goods = yield getGoods();}// 创建迭代器对象并开始执行let iterator = gen();iterator.next();</script>
</body>
</html>

实例 3:使用生成器函数处理回调地狱

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>生成器函数实例</title>
</head>
<body><script>javascript">// 异步函数function one() {setTimeout(() => {console.log(111);iterator.next();}, 1000);}function two() {setTimeout(() => {console.log(222);iterator.next();}, 2000);}function three() {setTimeout(() => {console.log(333);iterator.next();}, 3000);}// 生成器函数function* gen() {yield one();yield two();yield three();}// 创建迭代器对象并开始执行let iterator = gen();iterator.next();</script>
</body>
</html>

生成器函数的参数传递

生成器函数可以接受参数,并且可以在 yield 表达式中使用这些参数。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>生成器函数参数</title>
</head>
<body><script>javascript">function* gen(arg) {console.log(arg);let one = yield 111;console.log(one);let two = yield 222;console.log(two);let three = yield 333;console.log(three);}// 执行生成器函数并传递参数let iterator = gen('AAA');console.log(iterator.next());console.log(iterator.next('BBB'));//next中传入的BBB将作为yield 111的返回结果console.log(iterator.next('CCC'));//next中传入的CCC将作为yield 222的返回结果console.log(iterator.next('DDD'));//next中传入的DDD将作为yield 333的返回结果</script>
</body>
</html>

通过以上实例,你可以看到生成器函数在处理异步操作和避免回调地狱方面的强大能力。希望这些教程对你有所帮助!


http://www.ppmy.cn/embedded/149325.html

相关文章

建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09; 建造者模式是一种 创建型设计模式&#xff0c;它将一个复杂对象的构造与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 原理 核心思想&#xff1a;通过一步步的构建过程来创建复杂对象&#xff0c;而不…

各种网站(学习资源、常用工具及其他,持续更新中~)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…

PyQt实战——随机涂格子的特色进度条(十一)

系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序入口QMainWindow&#xff08;三&…

5G -- 网络安全

网络安全威胁 域外:运营商网络域外关键安全威胁 一、空口安全威胁 用户数据、信息窃听/篡改DDos攻击拒绝用户接入非授权终端违法接入网络伪基站触发终端降维攻击空口恶意干扰 二、Internet安全威胁 用户数据传输泄露、篡改仿冒网络应用拒绝特定服务Internet侧DDos攻击&…

深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐

Maven 和 Gradle 是 Java 项目中最常用的构建工具。它们各有优势&#xff0c;适用于不同的场景。本文将对两者进行详细的对比&#xff0c;并推荐一些常用的 Maven 和 Gradle 仓库&#xff0c;帮助开发者高效管理依赖。 一、Maven 和 Gradle 的使用比较 1.1 基本介绍 Maven 基…

抖去推碰一碰系统技术源码/open SDK转发技术开发

抖去推碰一碰系统技术源码/open SDK转发技术开发 碰一碰智能系统#碰碰卡系统#碰一碰系统#碰一碰系统技术源头开发 碰碰卡智能营销系统开发是一种集成了人工智能和NFC技术的工具&#xff0c;碰碰卡智能营销系统通过整合数据分析、客户关系管理、自动化营销活动、多渠道整合和个…

opencv中的各种滤波器简介

在 OpenCV 中&#xff0c;滤波器是图像处理中的重要工具&#xff0c;用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能&#xff1a; 对图像进行平滑处理&#xff0c;减少噪声。 应用场景&#xff1a; 去除图像…

MIT实验笔记冲刺2 实验部分

目录 实现trace调用&#xff08;系统调用跟踪&#xff08;中等&#xff09;&#xff09; 攻击 xv6&#xff08;中等&#xff09; 下面就是实验的部分&#xff0c;Lab2中的实验有两个。一个是syscall implementations&#xff0c;另一个则是利用未抹除的内存内容来读取上一个内…