当前位置:首页 > JavaScript

js yield 实现

2026-03-14 08:11:36JavaScript

yield 实现原理

在 JavaScript 中,yield 是生成器函数(Generator Function)的关键字,用于暂停和恢复函数执行。生成器函数通过 function* 语法定义,调用时返回一个生成器对象(Generator Object),该对象遵循迭代器协议。

js yield 实现

基本用法示例

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

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

实现机制

生成器函数通过 yield 暂停执行,保存当前上下文(包括局部变量、参数等)。每次调用 next() 方法时,函数从上次暂停处继续执行,直到遇到下一个 yieldreturn

js yield 实现

手动模拟 yield

可以通过闭包和状态管理模拟生成器行为:

function createSimulatedGenerator() {
  let state = 0;
  return {
    next() {
      switch (state) {
        case 0:
          state++;
          return { value: 1, done: false };
        case 1:
          state++;
          return { value: 2, done: false };
        default:
          return { value: undefined, done: true };
      }
    }
  };
}

异步生成器

yield 可与异步操作结合,实现类似 async/await 的流程控制:

async function* asyncGenerator() {
  const data = await fetchData();
  yield data;
}

注意事项

  • 生成器对象只能遍历一次,再次调用 next() 会返回 { done: true }
  • yield* 用于委托给另一个生成器或可迭代对象
  • 生成器函数不能使用箭头函数语法

实际应用场景

  • 惰性计算:按需生成值,节省内存
  • 状态机:管理复杂的状态转换
  • 异步流程控制:配合 Promise 使用

以上内容展示了 JavaScript 中 yield 的基本实现原理和使用方法,通过生成器函数可以实现更灵活的迭代控制和异步编程模式。

标签: jsyield
分享给朋友:

相关文章

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…