VuePressVuePress
首页
  • 基础
  • UI
  • JavaScript
  • CSS
  • postcss
  • Vue3
  • Vue的设计与实现
  • 前端常用插件
  • PHP
  • Laravel
  • Linux
  • 线性代数
Category
AI
jiyun
Timeline
首页
  • 基础
  • UI
  • JavaScript
  • CSS
  • postcss
  • Vue3
  • Vue的设计与实现
  • 前端常用插件
  • PHP
  • Laravel
  • Linux
  • 线性代数
Category
AI
jiyun
Timeline
  • 基础知识

    • 基础知识
    • promise简介
    • promise1
    • promise2
    • 点语法和方括号语法的区别
    • 常用字符串数组过滤函数
  • 全局对象

    • 数组
    • 对象
    • 字符串
  • dom

    • HTMLElement和Node有何不同
  • 字符串

    • 字符串截取导致的BUG
  • 媒体查询

    • 媒体查询
  • WebWorker

    • Web Worker
function* batchGenerator(total, batchSize) {
  for (let i = 0; i < total; i += batchSize) {
    yield { start: i, end: Math.min(i + batchSize, total) };
  }
}

const batches = batchGenerator(quantity, 100);
for (const batch of batches) {
  // 生成并打印这一批标签
}

这里的 yield 是什么意思?

在这段代码中,yield 是 JavaScript 生成器函数(Generator Function)的一个关键字。它的作用是暂停生成器函数的执行,并返回一个值给调用者。让我详细解释一下:

  • function* 声明了一个生成器函数。生成器函数可以被暂停和恢复执行。
  • yield 关键字用于暂停函数的执行,并返回一个值。每次调用生成器的 next() 方法时,函数会继续执行到下一个 yield 语句。
  • 在这个例子中,yield 返回一个对象 { start: i, end: Math.min(i + batchSize, total) },表示当前批次的起始和结束索引。
  • 生成器函数可以通过 for...of 循环进行迭代,每次迭代都会获得一个 yield 返回的值。
  • 这个 batchGenerator 函数的作用是将一个大的任务(总数为 total)分割成多个小批次(每批大小为 batchSize)。例如,如果 total 是 250,batchSize 是 100,那么它会生成三个批次:
    1. { start: 0, end: 100 }
    2. { start: 100, end: 200 }
    3. { start: 200, end: 250 }

使用生成器的好处是它可以惰性计算这些批次,只有在需要时才生成下一个批次,这在处理大量数据时可以提高效率和减少内存使用。

在随后的 for 循环中,每次迭代都会处理一个批次的标签,这样可以将大量的标签生成和打印任务分解成更小、更易管理的部分。

Last Updated:
Contributors: BaronYan