>[danger] Generator函数接触过吗? 迭代器(Iterator)和生成器(Generator)是 JavaScript 中的两个重要概念,它们之间有着密切的关系。 迭代器是一种对象,它提供了一种方法来访问一个容器(如数组或对象)中的元素,而不需要暴露容器的内部实现。迭代器对象必须实现一个 next() 方法,该方法返回一个包含 value 和 done 两个属性的对象。value 属性表示当前迭代到的元素,done 属性表示迭代是否结束。 生成器是一种特殊的函数,它可以在执行过程中暂停并恢复。生成器函数使用 function* 关键字定义,它内部可以使用 yield 关键字来暂停执行并返回一个值。生成器函数返回的是一个迭代器对象,可以通过调用 next() 方法来依次访问生成器函数中 yield 返回的值。 因此,可以说生成器是一种特殊的迭代器,它可以通过 yield 关键字来暂停执行并返回值,而不需要手动实现 next() 方法。生成器函数返回的是一个迭代器对象,可以通过调用 next() 方法来依次访问生成器函数中 yield 返回的值。 下面是一个简单的示例,演示了迭代器和生成器的关系: ```javascript function* generateNumbers() { let i = 0; while (i < 5) { yield i++; } } const iterator = generateNumbers(); console.log(iterator.next()); // { value: 0, done: false } 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: 4, done: false } console.log(iterator.next()); // { value: undefined, done: true } ``` 上述代码中,我们定义了一个 generateNumbers() 生成器函数,它可以生成 0 到 4 的数字。我们通过调用 generateNumbers() 函数来获取一个迭代器对象,然后依次调用 next() 方法来访问生成器函数中 yield 返回的值。每次调用 next() 方法时,生成器函数会从上次暂停的位置继续执行,直到遇到下一个 yield 关键字或者函数结束。当生成器函数执行完毕后,迭代器对象的 done 属性为 true,value 属性为 undefined。