質問するログイン新規登録

回答編集履歴

29

テキスト修正

2018/06/24 14:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -83,6 +83,13 @@
83
83
  `for`ループも使わないで出来ます。
84
84
 
85
85
  ```javascript
86
+ let num = [...Array(10)].map((_ ,i) => i+1);
87
+
88
+ console.log(num); // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
89
+ ```
90
+
91
+ または、
92
+ ```javascript
86
93
  let num = Array(10).fill(0).map((_ ,i) => i+1);
87
94
 
88
95
  console.log(num); // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

28

テキスト修正

2018/06/24 14:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -79,7 +79,8 @@
79
79
  いろいろ脇道にそれてすみません。
80
80
 
81
81
  1から10までの整数が要素として入っている配列を作って、`let num` に入れることが
82
- 主目的なのであれば、以下のようにすると `for`を使わない出来ます。
82
+ 主目的なのであれば、以下のようにすると、クロージャもジェネレータも不要、かつ、
83
+ `for`ループも使わないで出来ます。
83
84
 
84
85
  ```javascript
85
86
  let num = Array(10).fill(0).map((_ ,i) => i+1);

27

テキスト修正

2018/06/10 15:25

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -27,16 +27,9 @@
27
27
  ---
28
28
  **補足 1**
29
29
 
30
- 以下、ご質問の本題からやや外れるかもしれませんが、補足します
30
+ 以下、ご質問の本題からやや外れるかもしれませんが、補足しますと、
31
+ [ジェネレータ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator)を使って以下のような実現方法もあるかなと思いました。
31
32
 
32
- 以下の3点
33
-
34
- - グローバル変数を使わずに、
35
- - 1回の呼び出しで、出力すべき値が1ずつ増えていき、
36
- - 次の呼び出しまで、現在の値を保持する。
37
-
38
- が要件だとすると、[ジェネレータ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator)を使って以下のような実現方法もあるかなと思いました。
39
-
40
33
  ```javascript
41
34
  function* increaseGen(start, end) {
42
35
  let n = start;
@@ -51,7 +44,7 @@
51
44
 
52
45
  > 呼び出されるたびに戻り値が一ずつ増える関数
53
46
 
54
- "近いもの" になります。
47
+ (近いものに) なります。
55
48
  欲しい値(今の場合、1から始まり 10 まで1ずつ増える整数)は `f.next()` が返す値
56
49
  としてではなく、 `f.next()` の返すオブジェクト(イテレータリザルトと呼ばれます。)の
57
50
  `value` プロパティとして得られます。

26

テキスト修正

2018/06/10 14:52

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -70,7 +70,7 @@
70
70
  console.log(f.next()); // => { value: undefined, done: true }
71
71
  ```
72
72
 
73
- 上記のような `increaseGen` を作っておくことによって、
73
+ 上記のような `increaseGen` を作っておくことによって、`for`ループを使わなくても
74
74
 
75
75
  ```javascript
76
76
  let num = [...increaseGen(1,10)];

25

テキスト修正

2018/06/10 14:26

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -39,8 +39,9 @@
39
39
 
40
40
  ```javascript
41
41
  function* increaseGen(start, end) {
42
+ let n = start;
42
- while ( start <= end )
43
+ while ( n <= end )
43
- yield start ++;
44
+ yield n ++;
44
45
  }
45
46
 
46
47
  const f = increaseGen(1, 10);

24

テキスト修正

2018/06/10 14:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  が出力されます。
26
26
 
27
27
  ---
28
- **補足**
28
+ **補足 1**
29
29
 
30
30
  以下、ご質問の本題からやや外れるかもしれませんが、補足します。
31
31
 
@@ -44,18 +44,29 @@
44
44
  }
45
45
 
46
46
  const f = increaseGen(1, 10);
47
+ ```
47
48
 
49
+ こうすると、`f.next` が、ご質問のタイトルにある
50
+
51
+ > 呼び出されるたびに戻り値が一ずつ増える関数
52
+
53
+ に "近いもの" になります。
54
+ 欲しい値(今の場合、1から始まり 10 まで1ずつ増える整数)は `f.next()` が返す値
48
- console.log(f.next().value); // => 1
55
+ としてではなく、 `f.next()` の返すオブジェクト(イテレータリザルトと呼ばれます。)の
49
- console.log(f.next().value); // => 2
56
+ `value` プロパティとして得られます。
57
+
50
- console.log(f.next().value); // => 3
58
+ ```javascript
51
- console.log(f.next().value); // => 4
52
- console.log(f.next().value); // => 5
53
- console.log(f.next().value); // => 6
54
- console.log(f.next().value); // => 7
55
- console.log(f.next().value); // => 8
56
- console.log(f.next().value); // => 9
57
- console.log(f.next().value); // => 10
58
- console.log(f.next().value); // => undefined
59
+ console.log(f.next()); // => { value: 1, done: false }
60
+ console.log(f.next()); // => { value: 2, done: false }
61
+ console.log(f.next()); // => { value: 3, done: false }
62
+ console.log(f.next()); // => { value: 4, done: false }
63
+ console.log(f.next()); // => { value: 5, done: false }
64
+ console.log(f.next()); // => { value: 6, done: false }
65
+ console.log(f.next()); // => { value: 7, done: false }
66
+ console.log(f.next()); // => { value: 8, done: false }
67
+ console.log(f.next()); // => { value: 9, done: false }
68
+ console.log(f.next()); // => { value: 10, done: false }
69
+ console.log(f.next()); // => { value: undefined, done: true }
59
70
  ```
60
71
 
61
72
  上記のような `increaseGen` を作っておくことによって、
@@ -69,7 +80,7 @@
69
80
  ジェネレータは何かと便利です。
70
81
 
71
82
  ---
72
- **補足2**
83
+ **補足 2**
73
84
 
74
85
  いろいろ脇道にそれてすみません。
75
86
 

23

テキスト修正

2018/06/10 14:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -38,7 +38,7 @@
38
38
  が要件だとすると、[ジェネレータ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator)を使って以下のような実現方法もあるかなと思いました。
39
39
 
40
40
  ```javascript
41
- function *increaseGen(start, end) {
41
+ function* increaseGen(start, end) {
42
42
  while ( start <= end )
43
43
  yield start ++;
44
44
  }

22

テキスト修正

2018/06/10 13:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -73,7 +73,7 @@
73
73
 
74
74
  いろいろ脇道にそれてすみません。
75
75
 
76
- 1から10まで、1ずつ増える整数が要素として入っている配列を作って、`let num` に入れることが
76
+ 1から10まで整数が要素として入っている配列を作って、`let num` に入れることが
77
77
  主目的なのであれば、以下のようにすると `for`を使わないで出来ます。
78
78
 
79
79
  ```javascript

21

テキスト修正

2018/06/10 13:04

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  とするだけで、1から10までを要素に含む配列 `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` が
68
68
  `num` に入ります。
69
- ジェネレータは何かと便利です。
69
+ ジェネレータは何かと便利です。
70
70
 
71
71
  ---
72
72
  **補足2**

20

テキスト修正

2018/06/10 13:01

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  console.log(num);
16
16
  ```
17
17
 
18
- 上記のコードにある `f` は `increase` の仮引数 `x` への
18
+ 上記のコードにある `f` は `increase` の仮引数 `x` への
19
19
  参照を保持したクロージャであり、この `f` がご質問のタイトルにある、
20
20
 
21
21
  > 呼び出されるたびに戻り値が一ずつ増える関数

19

テキスト修正

2018/06/10 10:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,11 +15,12 @@
15
15
  console.log(num);
16
16
  ```
17
17
 
18
+ 上記のコードにある `f` は `increase` の仮引数 `x` への
18
- 上記のコドに `f` がご質問のタイトルにある、
19
+ 参照を保持したクロジャでり、この `f` がご質問のタイトルにある、
19
20
 
20
21
  > 呼び出されるたびに戻り値が一ずつ増える関数
21
22
 
22
- になっており、実行すると`num` の内容として
23
+ になっています。上記のコードを実行すると`num` の内容として
23
24
  `[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]`
24
25
  が出力されます。
25
26
 

18

テキスト修正

2018/06/10 10:33

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  console.log(f.next().value); // => undefined
58
58
  ```
59
59
 
60
- 上記のようなincreaseGen を作っておくことによって、
60
+ 上記のような `increaseGen` を作っておくことによって、
61
61
 
62
62
  ```javascript
63
63
  let num = [...increaseGen(1,10)];

17

テキスト修正

2018/06/10 10:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -72,8 +72,8 @@
72
72
 
73
73
  いろいろ脇道にそれてすみません。
74
74
 
75
- 1から10までが要素として入っている配列を作って、`let num` に入れることが主目的なのであれば、
75
+ 1から10まで、1ずつ増える整数が要素として入っている配列を作って、`let num` に入れることが
76
- 以下のようにすると `for`を使わないで出来ます。
76
+ 主目的なのであれば、以下のようにすると `for`を使わないで出来ます。
77
77
 
78
78
  ```javascript
79
79
  let num = Array(10).fill(0).map((_ ,i) => i+1);

16

テキスト修正

2018/06/10 10:16

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,8 +15,14 @@
15
15
  console.log(num);
16
16
  ```
17
17
 
18
- 上記を実行すと、 `[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]` が出力されます。
18
+ 上記のコードにある `f` がご質問のタイトルにある、
19
19
 
20
+ > 呼び出されるたびに戻り値が一ずつ増える関数
21
+
22
+ になっており、実行すると`num` の内容として
23
+ `[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]`
24
+ が出力されます。
25
+
20
26
  ---
21
27
  **補足**
22
28
 
@@ -51,7 +57,7 @@
51
57
  console.log(f.next().value); // => undefined
52
58
  ```
53
59
 
54
- 上記のような、increaseGen を作っておくと、
60
+ 上記のような、increaseGen を作っておくによって
55
61
 
56
62
  ```javascript
57
63
  let num = [...increaseGen(1,10)];

15

テキスト修正

2018/06/10 10:11

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -3,23 +3,19 @@
3
3
  [クロージャ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures)を使って、以下のように書けます。
4
4
 
5
5
  ```javascript
6
- const increase = (startValue) => (() => startValue ++);
6
+ const increase = (x) => (() => x ++);
7
7
 
8
8
  const f = increase(1);
9
9
 
10
+ let num = new Array();
11
+ for(let i = 0;i < 10;i ++) {
12
+ num[i] = f();
13
+ }
14
+
10
- console.log(f());
15
+ console.log(num);
11
- console.log(f());
12
- console.log(f());
13
- console.log(f());
14
- console.log(f());
15
- console.log(f());
16
- console.log(f());
17
- console.log(f());
18
- console.log(f());
19
- console.log(f());
20
16
  ```
21
17
 
22
- 上記を実行すると、 1, 2, 3 ... 10 が改行されて出力されます。
18
+ 上記を実行すると、 `[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]` が出力されます。
23
19
 
24
20
  ---
25
21
  **補足**
@@ -29,7 +25,7 @@
29
25
  以下の3点
30
26
 
31
27
  - グローバル変数を使わずに、
32
- - 1回の呼び出しで、出力すべき値が1ずつ増えていき、
28
+ - 1回の呼び出しで、出力すべき値が1ずつ増えていき、
33
29
  - 次の呼び出しまで、現在の値を保持する。
34
30
 
35
31
  が要件だとすると、[ジェネレータ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator)を使って以下のような実現方法もあるかなと思いました。

14

テキスト修正

2018/06/10 09:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -58,10 +58,11 @@
58
58
  上記のような、increaseGen を作っておくと、
59
59
 
60
60
  ```javascript
61
- [...increaseGen(1,10)]
61
+ let num = [...increaseGen(1,10)];
62
62
  ```
63
63
 
64
- とするだけで、1から10までを要素に含む配列 `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` が得られます。
64
+ とするだけで、1から10までを要素に含む配列 `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` が
65
+ `num` に入ります。
65
66
  ジェネレーターは何かと便利です。
66
67
 
67
68
  ---
@@ -69,7 +70,7 @@
69
70
 
70
71
  いろいろ脇道にそれてすみません。
71
72
 
72
- 1から10までが要素として入っている配列を作って、`let num` に入れることが目的なのであれば、
73
+ 1から10までが要素として入っている配列を作って、`let num` に入れることが目的なのであれば、
73
74
  以下のようにすると `for`文を使わないで出来ます。
74
75
 
75
76
  ```javascript

13

テキスト修正

2018/06/10 09:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -55,13 +55,13 @@
55
55
  console.log(f.next().value); // => undefined
56
56
  ```
57
57
 
58
- 上記のような、increaseGen を作っておくと、たとえば
58
+ 上記のような、increaseGen を作っておくと、
59
59
 
60
60
  ```javascript
61
- [...increaseGen(101,105)]
61
+ [...increaseGen(1,10)]
62
62
  ```
63
63
 
64
- とするだけで、101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
64
+ とするだけで、1から10までを要素に含む配列 `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` が得られます。
65
65
  ジェネレーターは何かと便利です。
66
66
 
67
67
  ---

12

テキスト修正

2018/06/10 09:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -73,7 +73,7 @@
73
73
  以下のようにすると `for`文を使わないで出来ます。
74
74
 
75
75
  ```javascript
76
- let num = Array(10).fill(0).map((e,i) => i+1);
76
+ let num = Array(10).fill(0).map((_ ,i) => i+1);
77
77
 
78
78
  console.log(num); // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
79
79
  ```

11

テキスト修正

2018/06/10 09:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -64,4 +64,19 @@
64
64
  とするだけで、101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
65
65
  ジェネレーターは何かと便利です。
66
66
 
67
+ ---
68
+ **補足2**
69
+
70
+ いろいろ脇道にそれてすみません。
71
+
72
+ 1から10までが要素として入っている配列を作って、`let num` に入れることが目的なのであれば、
73
+ 以下のようにすると `for`文を使わないで出来ます。
74
+
75
+ ```javascript
76
+ let num = Array(10).fill(0).map((e,i) => i+1);
77
+
78
+ console.log(num); // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
79
+ ```
80
+
81
+
67
82
  以上参考になれば幸いです。

10

テキスト修正

2018/06/10 09:39

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,25 +1,22 @@
1
1
  こんにちは。
2
2
 
3
- カウンタとしてグルーバル変数を使いたくないのであれば、
4
3
  [クロージャ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures)を使って、以下のように書けます。
5
4
 
6
5
  ```javascript
7
- const increase = (startValue) => (
6
+ const increase = (startValue) => (() => startValue ++);
8
- () => { console.log(startValue ++); }
9
- );
10
7
 
11
8
  const f = increase(1);
12
9
 
13
- f();
10
+ console.log(f());
14
- f();
11
+ console.log(f());
15
- f();
12
+ console.log(f());
16
- f();
13
+ console.log(f());
17
- f();
14
+ console.log(f());
18
- f();
15
+ console.log(f());
19
- f();
16
+ console.log(f());
20
- f();
17
+ console.log(f());
21
- f();
18
+ console.log(f());
22
- f();
19
+ console.log(f());
23
20
  ```
24
21
 
25
22
  上記を実行すると、 1, 2, 3 ... 10 が改行されて出力されます。
@@ -64,7 +61,7 @@
64
61
  [...increaseGen(101,105)]
65
62
  ```
66
63
 
67
- とする、101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
64
+ とするだけで、101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
68
65
  ジェネレーターは何かと便利です。
69
66
 
70
67
  以上参考になれば幸いです。

9

テキスト修正

2018/06/10 09:32

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  こんにちは。
2
2
 
3
- クロジャーを使って、こんのはかがしょう?
3
+ カウンタとしてグルバル変数を使いたくないあれば、
4
+ [クロージャ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Closures)を使って、以下のように書けます。
4
5
 
5
6
  ```javascript
6
7
  const increase = (startValue) => (
@@ -34,7 +35,7 @@
34
35
  - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
35
36
  - 次の呼び出しまで、現在の値を保持する。
36
37
 
37
- が要件だとすると、ジェネレータを使って以下のような実現方法もあるかなと思いました。
38
+ が要件だとすると、[ジェネレータ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator)を使って以下のような実現方法もあるかなと思いました。
38
39
 
39
40
  ```javascript
40
41
  function *increaseGen(start, end) {

8

テキスト修正

2018/06/10 09:13

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  以下の3点
32
32
 
33
- - 現在の値をグローバルに持たないようにし
33
+ - グローバル変数を使わずに、
34
34
  - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
35
35
  - 次の呼び出しまで、現在の値を保持する。
36
36
 

7

テキスト修正

2018/06/10 08:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -30,11 +30,11 @@
30
30
 
31
31
  以下の3点
32
32
 
33
- - 開始数(1)と最後の数(10)をグローバルに持たないようにし、
33
+ - 現在をグローバルに持たないようにし、
34
34
  - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
35
35
  - 次の呼び出しまで、現在の値を保持する。
36
36
 
37
- が要件だとすると、Generator を使って以下のような実現方法もあるかなと思いました。
37
+ が要件だとすると、ジェネレーターを使って以下のような実現方法もあるかなと思いました。
38
38
 
39
39
  ```javascript
40
40
  function *increaseGen(start, end) {
@@ -64,6 +64,6 @@
64
64
  ```
65
65
 
66
66
  とすると、101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
67
- Generator は何かと便利です。
67
+ ジェネレーターは何かと便利です。
68
68
 
69
69
  以上参考になれば幸いです。

6

コード修正

2018/06/10 07:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -4,9 +4,8 @@
4
4
 
5
5
  ```javascript
6
6
  const increase = (startValue) => (
7
- () => {
8
- console.log(startValue ++);
7
+ () => { console.log(startValue ++); }
9
- });
8
+ );
10
9
 
11
10
  const f = increase(1);
12
11
 

5

テキスト修正

2018/06/10 04:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -29,13 +29,13 @@
29
29
 
30
30
  以下、ご質問の本題からやや外れるかもしれませんが、補足します。
31
31
 
32
- 以下の3点が要件
32
+ 以下の3点
33
33
 
34
34
  - 開始の数(1)と最後の数(10)をグローバルに持たないようにし、
35
35
  - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
36
36
  - 次の呼び出しまで、現在の値を保持する。
37
37
 
38
- だとすると、Generator を使って以下のような実現方法もあるかなと思いました。
38
+ が要件だとすると、Generator を使って以下のような実現方法もあるかなと思いました。
39
39
 
40
40
  ```javascript
41
41
  function *increaseGen(start, end) {

4

テキスト修正

2018/06/10 04:31

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -29,13 +29,13 @@
29
29
 
30
30
  以下、ご質問の本題からやや外れるかもしれませんが、補足します。
31
31
 
32
- 以下の要件
32
+ 以下の3点が要件
33
33
 
34
- - 開始の数と最後の数をグローバルに持たないようにし、
34
+ - 開始の数(1)と最後の数(10)をグローバルに持たないようにし、
35
35
  - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
36
- - 次の呼び出しまで、現在の値を保持する
36
+ - 次の呼び出しまで、現在の値を保持する
37
37
 
38
- だと、Generator を使って以下のような実現方法もあるかなと思いました。
38
+ だとすると、Generator を使って以下のような実現方法もあるかなと思いました。
39
39
 
40
40
  ```javascript
41
41
  function *increaseGen(start, end) {
@@ -58,13 +58,13 @@
58
58
  console.log(f.next().value); // => undefined
59
59
  ```
60
60
 
61
- 上記のような、increaseGen を作っておくと、
61
+ 上記のような、increaseGen を作っておくと、たとえば
62
62
 
63
63
  ```javascript
64
- [...increaseGen(1,5)]
64
+ [...increaseGen(101,105)]
65
65
  ```
66
66
 
67
- 1から5までを要素に含む配列 `[1, 2, 3, 4, 5]` が得られます。
67
+ とすると101から105までを要素に含む配列 `[101, 102, 103, 104, 105]` が得られます。
68
68
  Generator は何かと便利です。
69
69
 
70
70
  以上参考になれば幸いです。

3

テキスト修正

2018/06/10 04:27

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -64,6 +64,7 @@
64
64
  [...increaseGen(1,5)]
65
65
  ```
66
66
 
67
- で、 `[1, 2, 3, 4, 5]` が得られます。Generator は何かと便利です。
67
+ で、1から5までを要素に含む配列 `[1, 2, 3, 4, 5]` が得られます。
68
+ Generator は何かと便利です。
68
69
 
69
70
  以上参考になれば幸いです。

2

テキスト修正

2018/06/10 04:24

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -55,6 +55,7 @@
55
55
  console.log(f.next().value); // => 8
56
56
  console.log(f.next().value); // => 9
57
57
  console.log(f.next().value); // => 10
58
+ console.log(f.next().value); // => undefined
58
59
  ```
59
60
 
60
61
  上記のような、increaseGen を作っておくと、

1

テキスト修正

2018/06/10 04:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -3,11 +3,10 @@
3
3
  クロージャーを使って、こんなのはいかがでしょう?
4
4
 
5
5
  ```javascript
6
- const increase = (startValue) => {
6
+ const increase = (startValue) => (
7
- return () => {
7
+ () => {
8
8
  console.log(startValue ++);
9
- }
10
- };
9
+ });
11
10
 
12
11
  const f = increase(1);
13
12
 
@@ -23,4 +22,47 @@
23
22
  f();
24
23
  ```
25
24
 
26
- 上記を実行すると、 1, 2, 3 ... 10 が改行されて出力されます。
25
+ 上記を実行すると、 1, 2, 3 ... 10 が改行されて出力されます。
26
+
27
+ ---
28
+ **補足**
29
+
30
+ 以下、ご質問の本題からやや外れるかもしれませんが、補足します。
31
+
32
+ 以下の要件
33
+
34
+ - 開始の数と最後の数をグローバルに持たないようにし、
35
+ - 1回の呼び出しで、出力すべき値が、1ずつ増えていき、
36
+ - 次の呼び出しまで、現在の値を保持する
37
+
38
+ だと、Generator を使って以下のような実現方法もあるかなと思いました。
39
+
40
+ ```javascript
41
+ function *increaseGen(start, end) {
42
+ while ( start <= end )
43
+ yield start ++;
44
+ }
45
+
46
+ const f = increaseGen(1, 10);
47
+
48
+ console.log(f.next().value); // => 1
49
+ console.log(f.next().value); // => 2
50
+ console.log(f.next().value); // => 3
51
+ console.log(f.next().value); // => 4
52
+ console.log(f.next().value); // => 5
53
+ console.log(f.next().value); // => 6
54
+ console.log(f.next().value); // => 7
55
+ console.log(f.next().value); // => 8
56
+ console.log(f.next().value); // => 9
57
+ console.log(f.next().value); // => 10
58
+ ```
59
+
60
+ 上記のような、increaseGen を作っておくと、
61
+
62
+ ```javascript
63
+ [...increaseGen(1,5)]
64
+ ```
65
+
66
+ で、 `[1, 2, 3, 4, 5]` が得られます。Generator は何かと便利です。
67
+
68
+ 以上参考になれば幸いです。