首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

面試考題

Generator functions 生成器函式

By Kurau·Updated 2026-05-09·2 分鐘閱讀

**function*** 宣告式(function 關鍵字後面跟著一個星號)定義了一個_生成器函式(generator function)_,他會回傳一個生成器(Generator) 物件。

基本語法

function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

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

核心概念

  • yield:暫停函式執行並回傳一個值,下次呼叫 next() 時從暫停處繼續
  • next():恢復生成器執行,回傳 { value, done } 物件
  • return():強制結束生成器
  • throw():向生成器內部拋出錯誤

實用場景

1. 無限序列

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

const fib = fibonacci();
console.log(fib.next().value); // 0
console.log(fib.next().value); // 1
console.log(fib.next().value); // 1
console.log(fib.next().value); // 2
JavaScript

2. 搭配 for...of 迭代

function* range(start, end) {
  for (let i = start; i <= end; i++) {
    yield i;
  }
}

for (const num of range(1, 5)) {
  console.log(num); // 1, 2, 3, 4, 5
}
JavaScript

3. 非同步流程控制(搭配 Promise)

在 async/await 出現之前,Generator 常用來處理非同步流程。現在 async/await 本質上就是 Generator + Promise 的語法糖。

目錄

    ◆ 相關文章

    • 箭頭函數 Arrow function expression

      2026-06-02
    • JavaScript的各種函式

      2026-05-09
    • Function Component 介紹

      2026-05-09
    • Functional Programming介紹

      2026-05-09
    ← 上一篇Functional Programming介紹下一篇 →npx create-react-app test --template cra-template-bobonext.js

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章