沃梦达 / IT编程 / 前端开发 / 正文

JavaScript之生成器_动力节点Java学院整理

生成器是可以随时随地暂停和继续执行的函数。在调用生成器函数时,不会立即执行函数,而是返回一个代表该生成器的对象,使用该对象可以随时暂停和继续执行函数。

JavaScript之生成器_动力节点Java学院整理

生成器是什么?

生成器是可以随时随地暂停和继续执行的函数。在调用生成器函数时,不会立即执行函数,而是返回一个代表该生成器的对象,使用该对象可以随时暂停和继续执行函数。

如何创建生成器?

使用关键字function*创建生成器函数。如下所示:

function* generateSequence() {
  yield 1;
  yield 2;
  return 3;
}

其中yield关键字可以用来暂停函数执行,并将控制权交回给调用者,返回的值会被包装在一个对象中,并携带状态信息。

如何使用生成器?

首先调用生成器函数,获取生成器对象,然后可以使用next()方法来触发生成器函数的执行,每次调用next()方法都会将生成器函数的执行推进一步,直到遇到yield关键字时暂停执行。

示例代码如下:

function* generateSequence() {
  yield 1;
  yield 2;
  return 3;
}

const generator = generateSequence();

console.log(generator.next()); // {value: 1, done: false}
console.log(generator.next()); // {value: 2, done: false}
console.log(generator.next()); // {value: 3, done: true}

可以在生成器中使用循环和条件语句

由于生成器函数和普通函数没有区别,因此可以在生成器函数中使用循环和条件语句。

示例代码如下:

function* fibonacci() {
  let [prev, curr] = [0, 1];
  while (true) {
    [prev, curr] = [curr, prev + curr];
    yield curr;
  }
}

const generator = fibonacci();

for (let i = 0; i < 10; i++) {
  console.log(generator.next()); 
}

上面的代码可以生成斐波那契数列的前10个数。

结论

通过生成器,我们可以实现一些复杂的状态机等逻辑,使代码更加简洁易懂。同时也可以应用在异步编程中,方便进行事件循环和异步操作的控制。

本文标题为:JavaScript之生成器_动力节点Java学院整理