試一試
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 |
瀏覽器相容性
載入中…