ES6的Generator函数详解
目的:用同步的方式来解决异步问题
function* helloWorldGenerator() {
yield "hello";
yield "world";
return "ending";
}
var hw = helloWorldGenerator();
console.log("hw", hw);
//执行
console.log(hw.next(),1);
console.log(hw.next(),2);
console.log(hw.next(),3);
console.log(hw.next(),4);
1.Generator函数中的function关键字与函数名之间有⼀个*
2.函数体内部使⽤yield表达式,定义不同的内部状态,产生一个阻塞的作用
3.yield表达式只能在 Generator 函数⾥使⽤,在其他地⽅会报错
4.yield 表达式后⾯的表达式,只有当调⽤ next ⽅法、内部指针指向该语句时才会执⾏,因此等于为 JavaScript 提供了⼿动的“惰性求值”(Lazy Evaluation)的语法功能
5.由于 Generator 函数返回的遍历器对象,只有调⽤ next ⽅法才会遍历下⼀个内部状态,所以其实提供了⼀种可以暂停执⾏的函数。
看下面的打印结果
作为一个普通的函数,这个hw打印的结果是return的值,但是Generator函数打印出来的不是这样,是一个生成器的对象
想要拿到每一行的状态,也就是每一个yeild的值,必须调用next()方法
我们可以看到没执行一次next(),就会执行一次,done是一个布尔值,当done的值是false的时候,说明Generator函数没有执行完。
我们可以看到上述打印的值,1,2打印的done值都是false,3打印的done值是true,说明执行3的时候,Generator函数已经执行完了,也就是当前遍历结束了。4执行的value值是undefined,说明没有值。