function* 表示式

Baseline 已廣泛支援

此特性已非常成熟,可在多種裝置和瀏覽器版本上使用。自 ⁨2016 年 9 月⁩以來,它已在各大瀏覽器中可用。

function* 關鍵字可用於在表示式內部定義一個生成器函式。

你也可以使用 function* 宣告來定義生成器函式。

試一試

const foo = function* () {
  yield "a";
  yield "b";
  yield "c";
};

let str = "";
for (const val of foo()) {
  str += val;
}

console.log(str);
// Expected output: "abc"

語法

js
function* (param0) {
  statements
}
function* (param0, param1) {
  statements
}
function* (param0, param1, /* …, */ paramN) {
  statements
}

function* name(param0) {
  statements
}
function* name(param0, param1) {
  statements
}
function* name(param0, param1, /* …, */ paramN) {
  statements
}

注意: 表示式語句不能以 function 關鍵字開頭,以避免與 function* 宣告產生歧義。function 關鍵字只有在不能接受語句的上下文中出現時,才表示一個表示式的開始。

引數

name 可選

函式名稱。可以省略,這種情況下函式是匿名的。該名稱僅在函式體內部區域性有效。

paramN 可選

函式形式引數的名稱。有關引數的語法,請參閱函式參考

statements 可選

構成函式體的語句。

描述

function* 表示式與 function* 宣告非常相似,且語法幾乎相同。function* 表示式和 function* 宣告之間的主要區別是函式名稱,在 function* 表示式中可以省略函式名稱以建立匿名函式。function* 表示式可以用作 IIFE(立即呼叫的函式表示式),它在定義後立即執行,允許你建立臨時的 可迭代迭代器物件。有關更多資訊,請參閱有關函式的章節。

示例

使用 function* 表示式

以下示例定義了一個未命名的生成器函式,並將其賦值給 x。該函式返回其引數的平方。

js
const x = function* (y) {
  yield y * y;
};

規範

規範
ECMAScript® 2026 語言規範
# sec-generator-function-definitions

瀏覽器相容性

另見