【ES6】Generator 函数

Generator 函数是 ES6 引入的一种新的函数类型,它既可以生成一个序列,又可以在某个条件下停止执行,并在需要时恢复执行。Generator 函数非常适合处理那些需要按需计算的场景,例如处理大数据、生成随机数等。

Generator 函数的基本语法

Generator 函数的语法如下:

function* generator() {
    
    
  yield value1;
  yield value2;
  // ...
}

其中,* 是 Generator 函数的标识符,yield 是 Generator 函数的关键字,用于生成一个值。在 Generator 函数中,每个 yield 都会生成一个值并暂停执行,只有调用 Generator 函数的 next() 方法时才会继续执行。

使用 Generator 函数

下面是一个简单的例子,展示了如何使用 Generator 函数生成一个序列:

function* sequence() {
    
    
  let i = 1;
  while (true) {
    
    
    yield i++;
  }
}

const sequenceGenerator = sequence();
console.log(sequenceGenerator.next()); // { value: 1, done: false }
console.log(sequenceGenerator.next()); // { value: 2, done: false }
console.log(sequenceGenerator.next()); // { value: 3, done: false }
// ...

在上面的例子中,我们定义了一个名为 sequence 的 Generator 函数,用于生成一个从 1 到无穷大的序列。在每次调用 next() 方法时,Generator 函数会生成下一个值并返回给调用者。

控制 Generator 函数的执行

除了通过 next() 方法控制 Generator 函数的执行外,我们还可以使用 return 语句来结束 Generator 函数的执行,并返回一个值:

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

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

在上面的例子中,我们在 Generator 函数的末尾使用了一个 return 语句,当调用第三次 next() 方法时,Generator 函数会返回 { value: 3, done: true },表示已经完成执行。

使用 for…of 循环遍历 Generator 函数生成的序列

除了使用 next() 方法遍历 Generator 函数生成的序列外,我们还可以使用 for…of 循环来遍历:

function* sequence() {
    
    
  let i = 1;
  while (true) {
    
    
    yield i++;
  }
}

const sequenceGenerator = sequence();
for (let value of sequenceGenerator) {
    
    
  console.log(value); // 1, 2, 3, ...
}

在上面的例子中,我们使用 for…of 循环来遍历 Generator 函数生成的序列,每次输出当前的值。需要注意的是,for…of 循环无法判断 Generator 函数是否已经完成执行,因此如果 Generator 函数已经结束,那么 for…of 循环将无法继续执行。

猜你喜欢

转载自blog.csdn.net/qq_22744093/article/details/132606731