当生成器被调用时,它不会运行它的代码。相反,它返回一个称为"生成器对象"的特殊对象,用于管理执行。
生成器函数可以随时将控制权返回(或让出)给调用者。
与常规函数不同,生成器可以根据要求一个接一个地返回(或产生)多个值。
function* mygenfun() // Valid { yield 1; yield 2; ... ... } function *mygenfun() // Valid { yield 1; yield 2; ... ... } function*mygenfun() // Valid { yield 1; yield 2; ... ... }
function* gen() { yield 100; yield; yield 200; } // Calling the Generator Function var mygen = gen(); console.log(mygen.next().value); console.log(mygen.next().value); console.log(mygen.next().value);
100 undefined 200
价值: 它是产生的价值。
done: 它是一个布尔值,如果函数代码已完成则返回真。否则,它会报错。
function* show() { yield 100; } var gen = show(); //here 'gen' is a generator object console.log(gen.next()); // { value: 100, done: false }
{ value: 100, done: false }
function* myGen() { yield 'First yield statement'; yield 'Second yield statement'; return 'return statement'; yield 'Second yield statement'; } let genobj = myGen(); console.log(genobj.next()); //returns {value: 'First yield statement', done: false} console.log(genobj.next()); //returns {value: 'Second yield statement', done: false} console.log(genobj.next()); //returns {value: 'return statement', done: true} console.log(genobj.next()); //returns {value: undefined, done: true}
{ value: 'First yield statement', done: false } { value: 'Second yield statement', done: false } { value: 'return statement', done: true } { value: undefined, done: true }
"use strict" function* vowels() { // here the asterisk marks this as a generator yield 'A'; yield 'E'; yield 'I'; yield 'O'; yield 'U'; } for(let alpha of vowels()) { console.log(alpha); }
A E I O U