怎样理解 JavaScript 中的 Generator函数?
生成器即时生成价值,这意味着只要需要该值,就只会生成它。这意味着该值已生成但未存储在内存中,因此执行时间更短。它在关键字函数即函数*之后使用星号(*) 符号来告诉 javaScript 它是一个生成器函数。生成器函数返回对象。
用例:
- 它在无限循环中使用,不会停止计算机或冻结您的程序。
- 它用作迭代器。
它具有特殊类型的返回关键字,即产量。 yield 的目的是运行一些代码然后返回值,运行更多代码并返回类似的值。
示例:当您在每个收益上访问 API 端点并且不知道用户想要多少结果时,执行收益的每个步骤都很昂贵时很有用,因此在这种情况下,您可以延迟这些 API 调用,直到他们实际上是需要的。
生成器有两个属性:
- 价值属性
- 完成的财产
句法:
Javascript
function* Generator(){
yield 1
yield 2
yield 3
}
const gen = Generator();
Javascript
Javascript
Javascript
function* Generator(){
let i=0;
while(i<5){
yield i;
i++;
}
}
const gen = Generator();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
Javascript
Javascript
Javascript
它主要使用三种函数:
- 下一个函数
- 返回函数
- 投掷函数
因此,在这里我们通过示例讨论下一个函数。
示例 1:
Javascript
输出:
示例 2:
Javascript
当生成器第一次调用它创建具有 next 属性的对象时,它不会打印任何内容,因为 next 属性允许单独执行生成器内的所有代码。
示例 3:
Javascript
function* Generator(){
let i=0;
while(i<5){
yield i;
i++;
}
}
const gen = Generator();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());
输出:
这里 while 循环只运行 5 次,并且在该循环终止之后,这就是为什么这里的第 5 个索引值未定义并且 done 属性为 true,因为在该生成器无法生成值之后,yield 返回直到 5 值。
示例 4:
Javascript
输出:
0
1
这里只返回值。
示例 5:
Javascript
输出:
这里生成器用作数组的迭代器。
示例 6:
Javascript
输出:
每次调用生成器函数时,它都会为单独的对象创建一个新实例,该对象具有自己的函数版本,可以自行迭代。