function* 生成器函数

【疑惑】

function* foo(x){
var y=2*(yield(x+1));
var z=yield(y/3);
return (x+y+z);
}
            
var a=foo(2);
console.log(a.next());
console.log(a.next(3));
console.log(a.next(1));
console.log(a.next());
/*
{value: 3, done: false}
{value: 2, done: false}
{value: 9, done: true}
{value: undefined, done: true}
*/

 生成器函数与其他函数不同的表现

1. 通过new运算符或函数调用的形式调用生成器函数,均会返回一个生成器实例;(感觉第一次像注册)

2. 通过new运算符或函数调用的形式调用生成器函数,均不会马上执行函数体的代码;

3. 必须调用生成器实例的next方法才会执行生成器函数体的代码。

如:

1 function *say(msg){
2 console.log(msg)
3 }
4 var gen = say('hello world') // 没有显示hello world
5 console.log(Object.prototype.toString.call(gen)) // 显示[object Generator]
6 gen.next(); //显示helloword

 关键字:yeild,迭代生成器

  用于马上退出代码块并保留现场,当执行迭代器的next函数时,则能从退出点恢复现场并继续执行下去。

 1. yield后面的表达式将作为迭代器next函数的返回值;

 2. 迭代器next函数的入参将作为yield的返回值(有点像运算符)。

猜你喜欢

转载自www.cnblogs.com/vera-7c/p/12969034.html