Generator

Generator函数是ES6提供的一种异步编程解决方案,Generator函数是一个状态机,封装了多个内部状态。

执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历Generator函数内部的每一个状态。

Generator的两个特征:

  • function关键字与函数名之间有一个星号
  • 函数体内部使用yield(产出)语句,定义不同的内部状态
function* helloWorldGenerator() {yield 'hello';yield 'world';return 'ending';
}var hw = helloWorldGenerator();
hw.next() // { value: 'hello', done: false } hw.next() // { value: 'world', done: false } hw.next() // { value: 'ending', done: true } hw.next() // { value: undefined, done: true }

yield语句

由于Generator函数返回的遍历器对象,只有调用next方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数。yield语句就是暂停标志。

yield和return

相似:都能返回紧跟在语句后面的那个表达式的值

区别:

  • 每次遇到yield,函数暂停执行,下一次再从该位置继续向后执行,而return语句不具备位置记忆的功能
  • 一个函数里面,只能执行一次(或者说一个)return语句,但是可以执行多次(或者说多个)yield语句。

在使用for...of时自动遍历Generator函数,不需要调用next方法

yield*语句

如果在Generater函数内部,调用另一个Generator函数,默认情况下是没有效果的。这个就需要用到yield*语句,用来在一个Generator函数里面执行另一个Generator函数。

function* bar() {yield 'x';yield* foo();yield 'y';
}// 等同于
function* bar() {yield 'x';yield 'a';yield 'b';yield 'y';
}// 等同于
function* bar() {yield 'x';for (let v of foo()) {yield v;}yield 'y';
}for (let v of bar()){console.log(v);
}
// "x"
// "a"
// "b"
// "y"

转载于:https://www.cnblogs.com/sker/p/5520697.html

ES6入门之Generator函数相关推荐

  1. setwindowshookex回调函数不执行_ECMAScript 6 入门教程—Generator 函数的异步应用

    作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...

  2. go 协程回调函数 传入参数_ECMAScript 6 入门教程—Generator 函数的异步应用

    作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...

  3. es6 --- 正确获取Generator函数内部的this对象使其可以使用new

    首先看2个例子 function * g() {this.a = 11; }let o = g(); console.log(o.a); 可以看见Generator函数里面的this指向的对象取不出来 ...

  4. es6 Class 的 Generator函数

    Class 的 Generator函数 如果某个方法之前加上星号(*),就表示该方法是一个 Generator函数. class Foo { constructor(...args) { this.a ...

  5. es6中的generator函数详解

    Generator 函数的定义 语法上,Generator 函数是一个状态机,封装了多个内部状态. 形式上,Generator是一个函数.不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示 ...

  6. 【ES6】阮一峰ES6学习之Generator 函数(一)

    Generator 1. 概念 2. yield表达式 1. 概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度 ...

  7. 阮一峰老师的ES6入门:async 函数

    async 函数 1. 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Gener ...

  8. es6 中的generator函数控制流程

    Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...

  9. ES6语法总结(21)--Generator函数的异步应用

    Generator 函数的异步应用 传统方法 基本概念 Generator 函数 Thunk 函数 co 模块 异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是&q ...

最新文章

  1. symfony 2 app.php,php / symfony2从URL隐藏app.php
  2. 计算机组成原理——概述1
  3. 计算机无法用u盘重装系统,没有u盘电脑开不了机重装系统的方法步骤详细教程 - 系统家园...
  4. 04 能够使用using和namespace引用和定义命名空间 1214
  5. Spring MVC 常用注解之 Controller 篇
  6. 解读ES6 Promise
  7. 物联网博客推荐:网昱多媒体
  8. 转:Secure CRT 中文乱码问题解决
  9. 如何在CAD中利用块实现坐标、高程的自动标注
  10. 一文详解对称密钥加密
  11. javascript DOM 操作基础知识小结
  12. 鸿蒙子系统解读-Camera子系统篇
  13. LIS的O(nLogN)算法
  14. 国内 Mono 相关文章汇总
  15. 论文阅读:RICAP: Random Image Cropping and Patching Data Augmentation for Deep CNNs
  16. vue-time-slot 一款基于vue3的会议预约时间组件,时间轴为早7-晚11,可自由选择,并且非常方便。
  17. kubesphere安装Maven+JDK17 流水线打包
  18. R语言和医学统计学(8):logistic回归
  19. springboot大学生兼职网站开发与设计毕业设计源码311734
  20. 漏洞挖掘工具-CE(Cheat Engine) 简介

热门文章

  1. ajax用post方法,jquery中get,post和ajax方法的使用小结
  2. android ipc 多个客户端,Android IPC之AIDL进阶篇
  3. java 分布式编译_linux分布式编译distcc和ccache的部署
  4. cmake mysql 编译参数_Cmake-MySQL编译参数说明
  5. Finally语句块的执行
  6. VS2010报错 error:LINK1123:转换到COF期间失败,文件无限或损坏
  7. python元组和集合
  8. 160 - 37 CyberBlade.1
  9. linux 内核配置 dns,linux bind dns简单配置
  10. UVA 11136——Hoax or what