news 2026/10/31 18:34:10

Generator 迭代器协议 co 库底层原理+实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Generator 迭代器协议 co 库底层原理+实战

这两个是理解 Generator 的「关键底层知识点」,也是面试中容易被追问的细节——迭代器协议是 Generator 能被遍历的基础,co 库是 Generator 实现异步流程控制的核心,我用最通俗的语言+代码拆解清楚。

一、迭代器协议(Iterator Protocol):Generator 能“暂停/遍历”的底层规则

1. 先搞懂:什么是“协议”?

协议就是「约定好的规则」——ES6 规定了两套和遍历相关的协议:

  • 可迭代协议(Iterable Protocol):一个对象只要有[Symbol.iterator]()方法,且该方法返回一个「迭代器对象」,就称这个对象“可迭代”(比如 Array、Set、Map、Generator 对象都符合);
  • 迭代器协议(Iterator Protocol):一个对象只要有next()方法,且next()返回{ value: 产出值, done: 是否完成 }格式的对象,就称这个对象是“迭代器”。

2. Generator 与迭代器协议的关系

Generator 函数调用后返回的「生成器对象」,同时满足可迭代协议 + 迭代器协议——这是它能被for...of遍历、能暂停/恢复的核心原因。

验证:生成器对象的协议合规性
function* gen() { yield 1; yield 2; } const g = gen(); // 生成器对象 // 1. 验证迭代器协议:有next(),返回{value, done} console.log(g.next()); // { value: 1, done: false } console.log(g.next()); // { value: 2, done: false } console.log(g.next()); // { value: undefined, done: true } // 2. 验证可迭代协议:有[Symbol.iterator](),且返回自身(迭代器) console.log(typeof g[Symbol.iterator] === 'function'); // true console.log(g[Symbol.iterator]() === g); // true(关键:返回自身) // 3. 因此能被for...of遍历(for...of只遍历done: false的value,忽略return值) for (let
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 11:52:33

Python工程化实战:从“面条代码“到“杨氏架构“的涅槃之路

作者:宸夜听风 | 原创声明:全网独一份,转载请联系授权 写在前面:这不是一篇教程,这是一份血泪史。五年独立开发,从网吧系统到AI智能体,我踩过的坑比某些人写的代码行数还多。今天,我把这套命名为"杨氏架构"的工程化方案开源出来,希望能帮你在Python开发路上…

作者头像 李华
网站建设 2026/10/25 11:29:06

2026 年杭州地铁 3 号线沿线酒店口碑排行,携程专业数据揭秘

2026 年杭州地铁 3 号线沿线酒店口碑排行,携程专业数据揭秘2026 年,杭州旅游和商务活动愈发繁荣,杭州地铁 3 号线沿线的酒店需求也随之增长。游客和商务人士都希望找到高口碑的酒店,本文结合携程专业数据,为你揭秘该沿…

作者头像 李华
网站建设 2026/10/29 6:24:05

企业如何打造数字化员工,如何落地实现

打造“数字化员工”,本质上是把人的工作能力与数字技术深度融合,让业务流程自动化、智能化,同时让员工借助工具提高效率与决策质量。它不是简单地买一套软件,而是一次组织级的数字化转型工程。下面我从理念到落地给你一个系统化的…

作者头像 李华
网站建设 2026/10/30 8:54:11

【Redis】设置Redis访问密码

设置密码有两种方式。 1. 命令行设置密码。 运行cmd切换到redis根目录,先启动服务端 >redis-server.exe另开一个cmd切换到redis根目录,启动客户端 >redis-cli.exe -h 127.0.0.1 -p 6379客户端使用config get requirepass命令查看密码 >config g…

作者头像 李华
网站建设 2026/10/30 9:06:31

自然语言处理 —— 基础入门

摘要:本文介绍了自然语言处理的基础知识,重点阐述了语言的构成要素和语法范畴。语言由音系学、形态学、句法学、语义学和语用学五个相互关联的部分组成。语法范畴包括数、性、人称、格、级、定指/不定指、时态、体、语气和一致关系等基本模块。文章还对比…

作者头像 李华