是一种 数据类型,一个 generator看着像一个函数,但可以返回多次。(JavaScript的生成器借鉴了python的生成器)
区别:
generator: 函数:
function* foo(x){ function foo(x){
yield x+1; //返回值
yield x+2; //返回值
return x+3;} //返回值 return x+1;}
直接调用生成器: foo(5);仅仅是创建一个generator,并不执行。
调用generator的方法有:
1⃣️:(手动)不断调用generator的next()方法。
foo(5).next(); //{value:6,done:false}
foo(5).next(); //{value:7,done:false}
foo(5).next(); //{value:8,done:true}
next()方法执行generator的代码,每遇到一个yield,就返回一个 对象: {value:值,done:true或false},然后暂停。done表示generator是否执行结束,value是yield的返回值。若done是true,则value是return的返回值,此generator执行完毕,不能再调用next()。
2⃣️:用for ...of...循环迭代generator对象(不需自己判断done)。
for( var x of foo(5) ){
console.log(x);} //输出为: 6,7,8
generator作用:
1⃣️:generator可以在执行中多次返回,可以理解为一个 能记住执行状态的函数。
2⃣️:把异步回调代码变成同步代码。(AJAX)