• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. yield *

生成器函数

2018-04-29 19:57:44
总字数 431
预计阅读时间 1 分钟

function *声明可以用于定义一个生成器函数 , 它返回一个Generator对象

语法

function * name([param[,param[,...param]]])
{ statement }

生成器是一种可以从中退出后重新进入的函数
函数内部的局部变量会在每次执行后被保存 , 下次进入可以继续使用

调用生成器函数并不会执行它的主体 , 而是返回对应的一个Generator对象
当这个对象的next()方法被调用时 , 生成器函数的主体会被执行至第一个yield表达式 , 该表达式定义了生成器本次生成的值
next()方法返回一个对象
包含value属性 , 是本次生成的值
以及done属性 , 表示生成器是否已经产出了最后一个值 ( 产出最后的值之后 , 调用next返回的对象当中value都是undefined )

Generator对象中的方法

  • Generator.prototype.next()
    返回一个由yield表达式生成的值
  • Generator.prototype.return( [val] )
    返回给定的值并结束生成器
  • Generator.prototype.throw( [msg] )
    向生成器抛出一个错误
1
2
3
4
5
6
7
8
9
10
11
12
13
function * num() {
var a = 0;
while(a < 3) {
yield a;
a++;
}
}

var gen = num();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); //undefined

yield *

可以将生成器中需要生成的值委派至另一个生成器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function* anotherGenerator(i) {
yield i + 1;
yield i + 2;
yield i + 3;
}

function* generator(i){
yield i;
yield* anotherGenerator(i);
yield i + 10;
}

var gen = generator(10);

console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20

生成器函数在浏览器当中的兼容性不佳 , 更推荐在nodejs当中使用 , 而不是在页面脚本当中使用
generate function
generate function

  • JavaScript
  • ECMAScript6
  • JavaScript

扫一扫,分享到微信

new关键字做了什么
扩展运算符的用法 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆