function*() { .... }
我刚刚在其他一些 js 代码中找到了这种定义形式,星号到底是什么意思?谢谢
在 ES2015+ 中,它定义了一个生成器函数。
下面是一个生成器的例子:
function* fibonacci() {
let [prev, curr] = [0, 1];
while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
多种使用方式:
使用for-of
循环(另一个 ES2015+ 事物):
for (const n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000) {
break;
}
console.log(n);
}
例子:
function* fibonacci() {
let [prev, curr] = [0, 1];
while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
for (const n of fibonacci()) {
// truncate the sequence at 1000
if (n > 1000) {
break;
}
console.log(n);
}
.as-console-wrapper {
max-height: 100% !important;
}
直接使用迭代器(for-of
在幕后为你使用它):
const seq = fibonacci();
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
console.log(seq.next().value); // 5
console.log(seq.next().value); // 8
function* fibonacci() {
let [prev, curr] = [0, 1];
while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
const seq = fibonacci();
console.log(seq.next().value); // 1
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3
console.log(seq.next().value); // 5
console.log(seq.next().value); // 8
.as-console-wrapper {
max-height: 100% !important;
}