推荐答案
// www.javascriptcn.com code example
function* generatorFunction() {
yield 1;
yield 2;
yield 3;
}
const generator = generatorFunction();
console.log(generator.next().value); // 输出: 1
console.log(generator.next().value); // 输出: 2
console.log(generator.next().value); // 输出: 3
console.log(generator.next().value); // 输出: undefined本题详细解读
Generator 函数的基本概念
Generator 函数是 ES6 引入的一种特殊函数,它可以通过 yield 关键字暂停函数的执行,并在需要时恢复执行。Generator 函数使用 function* 语法定义,调用时不会立即执行,而是返回一个 Generator 对象。
Generator 函数的执行过程
定义 Generator 函数:使用
function*语法定义一个 Generator 函数,函数体内可以使用yield关键字来暂停函数的执行并返回一个值。调用 Generator 函数:调用 Generator 函数时,不会立即执行函数体,而是返回一个 Generator 对象。
使用
next()方法:通过调用 Generator 对象的next()方法来执行函数体,直到遇到yield关键字。next()方法返回一个对象,包含value和done两个属性。value是yield表达式的值,done表示 Generator 函数是否执行完毕。恢复执行:每次调用
next()方法,Generator 函数会从上次暂停的地方继续执行,直到再次遇到yield或函数结束。
Generator 函数的应用场景
- 惰性求值:Generator 函数可以用于实现惰性求值,即只有在需要时才计算值。
- 异步编程:Generator 函数可以与
Promise结合使用,实现更简洁的异步编程模式。 - 迭代器:Generator 函数可以用于自定义迭代器,简化迭代器的实现。
示例代码解析
// www.javascriptcn.com code example
function* generatorFunction() {
yield 1;
yield 2;
yield 3;
}
const generator = generatorFunction();
console.log(generator.next().value); // 输出: 1
console.log(generator.next().value); // 输出: 2
console.log(generator.next().value); // 输出: 3
console.log(generator.next().value); // 输出: undefinedgeneratorFunction:这是一个 Generator 函数,定义了三个yield表达式。generator:调用generatorFunction返回的 Generator 对象。generator.next():每次调用next()方法,Generator 函数会执行到下一个yield表达式,并返回yield表达式的值。当所有yield表达式执行完毕后,next()方法返回的value为undefined,done为true。
通过这种方式,Generator 函数可以控制函数的执行流程,实现更灵活的编程模式。