迭代器(Iterators)和生成器(Generators)是 JavaScript 和 TypeScript 中的两个非常强大的特性。
迭代器是一种特殊的对象,它定义了遍历数据源(如数组、字符串等)的标准方式。迭代器对象必须实现以下方法:
const numbers = [1, 2, 3, 4, 5];
const numbersIterator = {
index: 0,
next() {
if (this.index < numbers.length) {
return { value: numbers[this.index++], done: false };
} else {
return { value: undefined, done: true };
}
}
};
while (true) {
const result = numbersIterator.next();
if (result.done) break;
console.log(result.value);
}
// Output: 1 2 3 4 5
生成器是一种特殊的函数,它们可以暂停执行并在稍后恢复。生成器函数使用 function* 语法定义,并使用 yield 关键字产生值。 下面是一个使用生成器的例子:
function* generateNumbers() {
yield 1;
yield 2;
yield 3;
yield 4;
yield 5;
}
const numbersGenerator = generateNumbers();
console.log(numbersGenerator.next().value); // 1
console.log(numbersGenerator.next().value); // 2
console.log(numbersGenerator.next().value); // 3
console.log(numbersGenerator.next().value); // 4
console.log(numbersGenerator.next().value); // 5
console.log(numbersGenerator.next().value); // undefined
在这个例子中,generateNumbers 函数是一个生成器函数,它使用 yield 关键字产生值。每次调用 next() 方法,生成器都会恢复执行并产生下一个值。