es6 Generator生成器函数

发布时间:2017-7-1 11:13:50编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"es6 Generator生成器函数 ",主要涉及到es6 Generator生成器函数 方面的内容,对于es6 Generator生成器函数 感兴趣的同学可以参考一下。

 生成器函数使用function*声明。

 在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。

1、next方法的参数

yield语句本身没有返回值,或者说总是返回undefined。

function* foo(x){
  var y=2*(yield(x+1));
  var z=yield(y/3);
  return (x+y+z);
}

var a=foo(5);
console.log(a.next());
console.log(a.next());
console.log(a.next());

不懂为什么后两个next()返回值里的value的值都是NaN。

因为:虽然yield后面的表达式有值,yield可以像return一样返回紧跟在yield语句后面的表达式的值。但是yield语句本身没有返回值,或者说总是返回undefined。

next()方法可以带一个参数,该参数会被当作上一条yield语句的返回值。

第一次使用next()方法时不能带有参数。

function* foo(x){
  var y=2*(yield(x+1));
  var z=yield(y/3);
  return (x+y+z);
}

var a=foo(5);
console.log(a.next());
console.log(a.next(12));
console.log(a.next(13));

  • 第一次调用next() 返回x+1的值6
  • 第二次调用next(),将上一次yield语句的值置为12,因此y=24;返回y/3的值8
  • 第三次调用next(),将上一次yield语句的值置为13,因此z=13,此时x值为5,y值为24,返回x+y+z的值为42

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6962607.html有问题欢迎与我讨论,共同进步。


上一篇:C# 委托基础
下一篇:ssh-keygen适用场景与rsync使用id_rsa技巧

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款