📅  最后修改于: 2023-12-03 14:42:28.092000             🧑  作者: Mango
Generator 是 ES6 中引入的新特性,它可以让开发者在函数中使用 yield 关键字,使得函数可以在每次调用时停止执行,而不是把所有代码执行完毕再返回结果。
Generator.prototype.next() 方法是 Generator 对象上的一个方法,它可以使 Generator 函数继续执行,直到下一个 yield 关键字。
generator.next(value);
参数:
value
:传递给 Generator 函数中上一个 yield 的返回值,可以是任意值,也可以省略不传递。返回值:
value
和 done
两个属性的对象,其中,value
表示执行到当前状态时 yield 关键字返回的值,done
表示当前 Generator 函数是否已经执行完毕。让我们看一个简单的 Generator 函数示例:
function* counter() {
let i = 0;
while (true) {
yield i++;
}
}
const gen = counter();
console.log(gen.next()); // { value: 0, done: false }
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
以上代码中,我们定义了一个名为 counter
的 Generator 函数。在 counter
函数中,我们使用了一个 while 循环,并且在每次循环中使用了 yield
关键字来返回一个值。
接着,我们创建了一个 gen
对象,并将 counter()
的执行结果赋值给它。然后,我们分别执行了三次 gen.next()
方法,并分别将返回值打印出来。
第一次执行 gen.next()
时,会执行 counter
函数,并将 yield i++
的结果 0
返回,此时对象的 done
属性为 false
,说明 counter
函数还未执行完毕。
第二次执行 gen.next()
时,counter
函数从上次停止的地方继续执行,并将 yield i++
的结果 1
返回。
第三次执行 gen.next()
时,同样会从上次停止的地方继续执行,将 yield i++
的结果 2
返回。
Generator.prototype.next() 方法是操作 Generator 函数的重要方法之一,通过它可以使得 Generator 函数依次执行,并返回想要的结果。在实际开发中,我们可以将 Generator 函数应用于异步编程、状态机等场景中,提高代码的可读性和维护性。