IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Hi Generator -> 正文阅读

[JavaScript知识库]Hi Generator

在接触到生成器之初对generator.next()和yield之间的关系是什么没有办法理解透彻,直到看到两句话:

  1. Generator 函数是一个状态机,封装了多个内部状态 — Generator 函数的语法
  2. 子程序(函数)就是协程的一种特例 — 协程

Generator 函数是一个状态机,封装了多个内部状态

function* helloworld() {
  yield 'hello'
  yield 'world'
}

const ge = helloworld()
ge.next()
ge.next()

Generator helloworld中通过两个yield产出了两个状态,分别是’hello’和’world’,Generator外部获取这两个状态的方式是调用ge对象的next()方法。

第一次调用next方法获取第一个状态"hello",第二次调用next方法获取第二个状态"world"

其中yield表达式和next方法均用来切换执行上下文,其中next方法将执行上下文从Generator函数外部切换到内部,而yield将执行上下文从Generator函数内部切换到函数外部。除了切换上下文next还将入参传入了函数内部作为yield表达式的返回值,同理,yield也将表达式的值传递给了函数外部。

function* helloworld() {
  const a = yield 1
  console.log(a)
  yield 3
}

const ge = helloworld()
const val1 = ge.next()
console.log(val1.value)
const val3 = ge.next(2)
console.log(val3.value)

// 打印顺序是1 2 3

子程序(函数)就是协程的一种特例

function* helloworld() {
  const a = yield 1
  console.log(a)
  yield 3
}

const ge = helloworld()
const val1 = ge.next()
console.log(val1.value)
const val3 = ge.next(2)
console.log(val3.value)

// 打印顺序是1 2 3

在例子里可以将next()可以当做在执行函数,而yield作为return来看的就会好理解很多。

  1. 第一个next()从函数第一行开始执行,到 yield 1 结束执行,返回值1到函数外部。
  2. 第二个next(2),从第一个yield 1处开始执行,用2作为yield 1的返回值,换句话说就是函数开始执行的入参,入参被const a接收,到yield 3返回值3

所以说子程序(函数)就是协程的一种特例。

函数也是封装了状态,通过调用函数获取对应状态,只是这个状态只有一个,函数只能被执行一次,retrun之后无法再继续return之后的语句执行,而generator提供了继续执行中断上下文执行的能力。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:47:38  更:2022-09-24 20:51:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:44:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码