1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
---
title: function* 式
slug: Web/JavaScript/Reference/Operators/function*
tags:
- ECMAScript 2015
- Function
- Iterator
- JavaScript
- Language feature
- Operator
- Primary Expression
browser-compat: javascript.operators.generator_function
translation_of: Web/JavaScript/Reference/Operators/function*
---
{{jsSidebar("Operators")}}</div>
**`function*`** キーワードは、式の中でジェネレーター関数を定義するために使用することができます。
{{EmbedInteractiveExample("pages/js/expressions-functionasteriskexpression.html",
"taller")}}
## 構文
```js
function* [name]([param1[, param2[, ..., paramN]]]) {
statements
}
```
### 引数
- `name` {{optional_inline}}
- : 関数名。省略可。省略した場合、関数は*無名関数*として認識されます。名前は関数本体のみにローカルです。
- `paramN` {{optional_inline}}
- : 関数に渡される引数の名前。関数は最大 255 個の引数を持つことができます。
- `statements`
- : 関数の本体を構成する文。
## 解説
`function*` 式は {{jsxref('Statements/function*', 'function* 文', "", 1)}}ととてもよく似ており、構文もほとんど同じです。`function*` 式と `function*` 文の主な違いは、`function*` 式で*無名*ジェネレーター関数を生成する場合は*関数名*が省略できる点です。詳細は {{jsxref("Functions", "functions")}} をご覧ください。
## 例
### function* の使用
次の例では、無名ジェネレーター関数を定義し、`x` に代入します。関数は引数の二乗を生成します。
```js
let x = function*(y) {
yield y * y;
};
```
## 仕様書
{{Specifications}}
## ブラウザーの互換性
{{Compat}}
## 関連情報
- {{jsxref("Statements/function*", "function*")}} 文
- {{jsxref("GeneratorFunction")}} オブジェクト
- [反復プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols)
- {{jsxref("Operators/yield", "yield")}}
- {{jsxref("Operators/yield*", "yield*")}}
- {{jsxref("Function")}} オブジェクト
- {{jsxref("Statements/function", "function")}} 文
- {{jsxref("Operators/function", "function")}} 式
- {{jsxref("Functions_and_function_scope", "関数と関数スコープ", "", 1)}}
|