ES6入门之Generator函数
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函数相关推荐
- setwindowshookex回调函数不执行_ECMAScript 6 入门教程—Generator 函数的异步应用
作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...
- go 协程回调函数 传入参数_ECMAScript 6 入门教程—Generator 函数的异步应用
作者 | 阮一峰异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是"单线程"的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Gener ...
- es6 --- 正确获取Generator函数内部的this对象使其可以使用new
首先看2个例子 function * g() {this.a = 11; }let o = g(); console.log(o.a); 可以看见Generator函数里面的this指向的对象取不出来 ...
- es6 Class 的 Generator函数
Class 的 Generator函数 如果某个方法之前加上星号(*),就表示该方法是一个 Generator函数. class Foo { constructor(...args) { this.a ...
- es6中的generator函数详解
Generator 函数的定义 语法上,Generator 函数是一个状态机,封装了多个内部状态. 形式上,Generator是一个函数.不同于普通函数,是可以暂停执行的,所以函数名之前要加星号,以示 ...
- 【ES6】阮一峰ES6学习之Generator 函数(一)
Generator 1. 概念 2. yield表达式 1. 概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度 ...
- 阮一峰老师的ES6入门:async 函数
async 函数 1. 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Gener ...
- es6 中的generator函数控制流程
Generator函数跟普通函数的写法有非常大的区别: 一是,function关键字与函数名之间有一个星号: 二是,函数体内部使用yield语句,定义不同的内部状态(yield在英语里的意思就是&qu ...
- ES6语法总结(21)--Generator函数的异步应用
Generator 函数的异步应用 传统方法 基本概念 Generator 函数 Thunk 函数 co 模块 异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是&q ...
最新文章
- symfony 2 app.php,php / symfony2从URL隐藏app.php
- 计算机组成原理——概述1
- 计算机无法用u盘重装系统,没有u盘电脑开不了机重装系统的方法步骤详细教程 - 系统家园...
- 04 能够使用using和namespace引用和定义命名空间 1214
- Spring MVC 常用注解之 Controller 篇
- 解读ES6 Promise
- 物联网博客推荐:网昱多媒体
- 转:Secure CRT 中文乱码问题解决
- 如何在CAD中利用块实现坐标、高程的自动标注
- 一文详解对称密钥加密
- javascript DOM 操作基础知识小结
- 鸿蒙子系统解读-Camera子系统篇
- LIS的O(nLogN)算法
- 国内 Mono 相关文章汇总
- 论文阅读:RICAP: Random Image Cropping and Patching Data Augmentation for Deep CNNs
- vue-time-slot 一款基于vue3的会议预约时间组件,时间轴为早7-晚11,可自由选择,并且非常方便。
- kubesphere安装Maven+JDK17 流水线打包
- R语言和医学统计学(8):logistic回归
- springboot大学生兼职网站开发与设计毕业设计源码311734
- 漏洞挖掘工具-CE(Cheat Engine) 简介
热门文章
- ajax用post方法,jquery中get,post和ajax方法的使用小结
- android ipc 多个客户端,Android IPC之AIDL进阶篇
- java 分布式编译_linux分布式编译distcc和ccache的部署
- cmake mysql 编译参数_Cmake-MySQL编译参数说明
- Finally语句块的执行
- VS2010报错 error:LINK1123:转换到COF期间失败,文件无限或损坏
- python元组和集合
- 160 - 37 CyberBlade.1
- linux 内核配置 dns,linux bind dns简单配置
- UVA 11136——Hoax or what