<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log("function*1 ", gen.next().value);
console.log("function*2 ", gen.next().value);
function makeRangIterator(start = 0, end = Infinity, step = 1) {
let nextIndex = start;
let iteratorCount = 0;
const rangIterator = {
next: function () {
let result;
if (nextIndex < end) {
result = { value: nextIndex, done: false };
nextIndex += step;
iteratorCount++;
return result;
}
return { value: iteratorCount, done: true };
},
};
return rangIterator;
}
let it = makeRangIterator(1, 5, 1);
let result = it.next();
while (!result.done) {
console.log(result.value);
result = it.next();
}
console.log("元素数量:", result.value);
function* makeRangIterator(start = 0, end = infinity, step = 1) {
for (let i = start; i < end; i += step) {
yield i;
}
}
let a = makeRangIterator(1, 10, 2);
for (value of a) {
console.log("生成器函数", value);
}
let myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
},
};
for (let value of myIterable) {
console.log("value", value);
}
console.log("[...myIterable]", [...myIterable]);
for (let value of ["a", "b", "c"]) {
console.log("用于可迭代对象的语法", value);
}
console.log("[...'abc']:", [..."abc"]);
function* gen2() {
yield* ["a", "b", "c"];
}
console.log(gen2().next());
[a, b, c] = new Set(["a", "b", "c"]);
console.log("a:", a);
function* fibonacci() {
var fn1 = 0;
var fn2 = 1;
while (true) {
var current = fn1;
fn1 = fn2;
fn2 = current + fn1;
var reset = yield current;
if (reset) {
fn1 = 0;
fn2 = 1;
}
}
}
var sequence = fibonacci();
var i2 = 8;
for (let i1 = 0; i1 < i2; i1++) {
if (i1 < i2) {
console.log(sequence.next().value);
}
}
</script>
</body>
</html>