js中迭代器和生成器面试
时间: 2023-11-20 17:04:51 浏览: 35
迭代器和生成器是 JavaScript 中非常重要的概念,常在面试中涉及。迭代器(Iterator)是一种对象,它提供了一种顺序访问集合中各个元素的方法,而不暴露集合的内部结构。生成器(Generator)是一种特殊类型的函数,可以暂停执行并返回中间结果。
1. 迭代器(Iterator):
- 迭代器是一个拥有 `next()` 方法的对象。
- `next()` 方法返回一个包含 `value` 和 `done` 属性的对象。
- `value` 表示当前迭代到的元素的值。
- `done` 表示迭代是否已经结束。
以下是一个简单的示例,展示如何使用迭代器遍历数组:
```javascript
const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
```
2. 生成器(Generator):
- 生成器是一种特殊类型的函数,使用 `function*` 声明,内部可以使用 `yield` 关键字。
- `yield` 关键字用于暂停生成器函数的执行,并返回一个中间结果。
- 每次调用生成器函数时,会返回一个迭代器对象,通过调用 `next()` 方法可以继续执行生成器函数。
以下是一个简单的示例,展示如何使用生成器函数生成斐波那契数列:
```javascript
function* fibonacci() {
let a = 0;
let b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
const fib = fibonacci();
console.log(fib.next().value); // 0
console.log(fib.next().value); // 1
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2
```
希望以上概念和示例能够帮助你在面试中更好地理解和回答相关问题!如果你有更多疑问,请随时提问。