掌握JavaScript中的迭代器和生成器,顺便了解一下async、await的原理.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
JavaScript 中的迭代器和生成器,async/await 原理详解 迭代器(Iterator)是确使用户在容器对象(链表或数组)上遍访的对象,使用该接口无需关心对象的内部实现细节。迭代器是一个对象,可用于帮助我们对某个数据结构(链表、数组)进行遍历。在 JavaScript 中,迭代器也是一个具体的对象,并且这个对象必须符合迭代器协议(iterator protocol)。 迭代器协议(iterator protocol)是指这个对象必须实现一个特定的 next 方法,并且 next 方法有如下要求: * next 方法可接收 0 个或者 1 个参数(在生成器中 next 可以接收 1 个参数),并且需返回一个对象,对象包含以下两个属性: + done:值为 Boolean,如果迭代器可以迭代产生下一个值,就为 false,如果已经迭代完毕,就为 true; + value:迭代器返回的值,如果 done 为 true,value 一般为 undefined。 编写一个最简单的迭代器: ``` const iterator = { next: function() { return { done: false, value: 123 } } } ``` 迭代器的基本使用: 明白了迭代器的基本定义,下面就来实现一下符合迭代器协议的对象吧,并且看看其它的一些基本用法。比如,需要通过迭代器访问一个数组: ``` const names = ['curry', 'kobe', 'klay'] let index = 0 // 通过一个 index 来记录当前访问的位置 const iterator = { next() { if (index < names.length) { return { done: false, value: names[index++] } } else { return { done: true, value: undefined } } } } ``` 实现生成迭代器的函数: 如果每次需要去访问一个数组就去编写一个对应的迭代器对象肯定是很麻烦的;可以封装一个函数,用于生成一个访问数组的迭代器。 ``` function createIterator(arr) { let index = 0 return { next() { if (index < arr.length) { return { done: false, value: arr[index++] } } else { return { done: true, value: undefined } } } } ``` 使用生成器实现迭代器: 生成器(Generator)是一个特殊的迭代器,使用 function* 声明,具有自动实现迭代器协议的能力。 ``` function* createGenerator(arr) { for (let i = 0; i < arr.length; i++) { yield arr[i] } } ``` async/await 的原理: async/await 是 Promise+生成器的语法糖,其原理是使用生成器来实现异步操作。当 async 函数执行时,实际上是执行了一个生成器,生成器会 yield 出一个 Promise 对象,async/await 语句的返回值实际上是这个 Promise 对象的结果。 迭代器和生成器是 JavaScript 中两个非常重要的概念, async/await 的原理也是建立在这两个概念之上的。通过掌握迭代器和生成器,可以更好地理解 async/await 的原理,并且更好地应用 async/await 在实际开发中。
剩余18页未读,继续阅读
- 粉丝: 1
- 资源: 2837
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 全国330多个地级市一、二、三产业GDP和全国及各省土地流转和耕地面积数据-最新出炉.zip
- FIC7608-spec-brief-V1.1 - 20240419
- 惠普打印机(M233sdn)驱动下载
- 初学者Python入门指南:从安装到应用
- 无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景
- 单通道H桥马达驱动器T1016H的技术参数与应用指南
- 全国各地级市GDP、土地流转和耕地面积数据-最新出炉.zip
- ARM Cortex-M0+微控制器 CW32F030x6/x8 数据手册解析与应用指导
- 1/2.55英寸CMOS图像传感器IMX362的技术特性与应用
- 使用TensorFlow实现花卉分类识别系统