首页/文章/八股文

Generator 是如何做到中断和恢复的

2025-02-13
660 字约 3 分钟
...

关键词:Generator 中断、Generator 回复

Generator 是 JavaScript 中一种特殊的函数,它能够通过迭代器协议(Iterator Protocol)实现中断和恢复的功能。

Generator 函数使用 function* 声明,内部可以使用 yield 关键字来定义中断点。当调用 Generator 函数时,它不会立即执行,而是返回一个迭代器对象。通过调用迭代器的 next() 方法,可以逐步执行 Generator 函数,并在每个 yield 关键字处暂停执行并返回一个包含当前值的对象。

当调用 next() 方法时,Generator 函数会从上次暂停的地方继续执行,直到遇到下一个 yield 关键字或函数结束。通过不断调用 next() 方法,可以逐步执行 Generator 函数的代码,并获取每个中断点处的值。

由于 Generator 函数具有中断和恢复的特性,可以用于异步编程,实现一种更直观的方式来处理异步操作。通过 yield 关键字,可以将异步操作分割成多个步骤,每个步骤都可以通过 yield 暂停,等待异步操作完成后再恢复执行。

以下是一个简单的示例,展示了 Generator 函数的中断和恢复特性:

function* generatorFunction() {
  console.log('Step 1');
  yield;
  console.log('Step 2');
  yield;
  console.log('Step 3');
}

const generator = generatorFunction();

generator.next(); // Step 1
generator.next(); // Step 2
generator.next(); // Step 3

在上述示例中,我们定义了一个名为 generatorFunction 的 Generator 函数。在函数体内,使用 console.log 打印了三个不同的步骤,并在每个步骤后使用 yield 关键字暂停执行。然后,我们通过调用 generator.next() 方法逐步执行 Generator 函数。每次调用 next() 方法时,函数会从上次暂停的地方恢复执行,打印相应的步骤。

通过使用 Generator 函数,可以实现更灵活、可控的异步编程模式,提供更好的代码可读性和维护性。

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
八股文2026-08-20
Embedding 向量模型:从语义表示到相似度计算
前言 大模型「读懂」文字靠的是 token,但 token 之间只有离散的编号关系,模型并不知道「苹果」和「李子」在语义上很近。要让程序能「理解」两段文字的相似程度,必须先把文本映射成一个 高维向量 ,再用几何方法比较。这一步就是 Embedding。 本篇基于我本地 今天的真实代码,从语义表示讲到余弦相似度,并复盘几个踩过的真实坑。 一、为什么需要 Embedding 传统关键词检索是「字面匹配」: Embedding 做的是「语义匹...
面试
八股文2026-08-19
前端面试100题
前端面试 100 题 适用方向:中高级前端 / React / Vue / Next.js / Nuxt / TypeScript / 工程化 / 实时通信 / Electron / Node.js / AI 应用前端 使用方式:优先掌握“标准回答”,再练“面试官追问”,最后把“结合你的简历怎么答”组织成自己的项目故事。 说明 “结合你的简历怎么答”只使用你简历中已经出现的项目与技术事实。 “标准回答 / 追问”属于通用前端知识总结,用...
面试
八股文2026-08-19
深入理解 JavaScript 原型与原型链:从关系图到核心逻辑 - heshanwan - 博客园
在 JavaScript 世界里, 原型(Prototype)和原型链(Prototype Chain) 是理解对象继承、属性查找机制的基石。很多开发者初学时对它们 “又爱又恨”,这篇文章将结合经典关系图,用通俗易懂的方式拆解原型与原型链的核心逻辑,帮你彻底掌握这套机制!   一、先搞懂几个核心概念 在分析关系图前,先明确 JavaScript 中与原型相关的关键概念,避免后续混淆: 1\. 函数对象与普通对象 函数对象 :由...
面试
八股文2026-08-17
JavaScript 闭包
摘要 :闭包(Closure)是 函数与其词法环境(Lexical Environment)的组合 ——一个函数可以"记住"并访问它被创建时所处的外部作用域中的变量,即使它在该作用域之外被执行。一句话记忆: 函数打包了出生地的变量,走到哪都能用 。核心要点:① 内部函数引用外部变量即形成闭包;② 闭包实现变量私有化/数据封装/柯里化;③ 潜在风险是内存泄漏和循环引用;④ 避免泄漏需手动解除引用和及时移除监听器。 一、什么是闭包 1.1...
面试
八股文2026-08-17
this 指向与 call / apply / bind
第 1 段(10min)回顾与预习:为什么必须搞懂 this 1.1 先接昨日(闭包)的线 昨天你学了 闭包 。闭包解决的是"函数记住它定义时所在作用域里的变量"。 闭包回答的问题是: “这个函数能访问到哪些变量?” → 看定义位置(词法作用域)。 而今天的主角 回答的是一个完全不同的问题: “这个函数执行时,站在谁的角度说话?” → 看 调用位置 (谁调用的、怎么调用的)。 一句话概括两者的分工: 变量看 定义处 , 看 调用处 。这...
面试
八股文2026-08-17
事件循环与宏任务 / 微任务
第 1 段(10min)回顾与预习:接住昨天的线 1.1 先接昨日(原型链)的线 昨天你学了 对象怎么找属性 (沿原型链上溯)。今天换一个维度: 代码怎么排队执行 。 把前三天的知识串成一句话,你已经有了 JS 的三张地图: 1.2 先凭直觉回答 4 个小问题(不用对,先写下答案) 学完第 2、3、4 段再回来对照。第 1 段只做一件事:记住画面—— JS 单线程,但靠"排队 + 轮转"假装多线程 。 第 2 段(15min)知识块①:...
面试

评论

请登录后发表评论

去登录
加载评论中...