es6 Generator生成器函数

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

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

一、next方法的参数学习

yield语句自己没有返回值,或者说老是返回undefined。spa

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。code

由于:虽然yield后面的表达式有值,yield能够像return同样返回紧跟在yield语句后面的表达式的值。可是yield语句自己没有返回值,或者说老是返回undefined。htm

next()方法能够带一个参数,该参数会被看成上一条yield语句的返回值。blog

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

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有问题欢迎与我讨论,共同进步。io

相关文章
相关标签/搜索