質問編集履歴
10
例えを追加
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -122,4 +122,6 @@
|
|
|
122
122
|
|
|
123
123
|
- 再帰処理が行われる
|
|
124
124
|
- その再帰関数(fn1)を別の関数(fn2)の引数に渡して実行する
|
|
125
|
-
- 再帰関数(fn1)を渡す別の関数(fn2)のスコープにある変数を再帰関数(fn1)は参照する(キャッシュ等)
|
|
125
|
+
- 再帰関数(fn1)を渡す別の関数(fn2)のスコープにある変数を再帰関数(fn1)は参照する(キャッシュ等)
|
|
126
|
+
|
|
127
|
+
※別の例を挙げると、フィボナッチの再帰的に行う関数をメモ化したようなものをイメージするとわかりやすいかもしれません。
|
9
修正
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -118,9 +118,8 @@
|
|
|
118
118
|
|
|
119
119
|
**質問に掲載しているサンプルコードは、表題のことを示す以外の意味はありません。**
|
|
120
120
|
|
|
121
|
-
そのため、「サンプルコードの場合であれば、再帰をつかなくてもこう出来る、高階関数使わなくてもこう出来る」のような話ではなく、
|
|
121
|
+
そのため、「サンプルコードの場合であれば、再帰をつかなくてもこう出来る、高階関数使わなくてもこう出来る」のような話ではなく、以下の条件を前提とした質問となります。
|
|
122
|
-
以下の条件を前提とした質問となります。
|
|
123
122
|
|
|
124
123
|
- 再帰処理が行われる
|
|
125
124
|
- その再帰関数(fn1)を別の関数(fn2)の引数に渡して実行する
|
|
126
|
-
- 再帰関数(fn1)
|
|
125
|
+
- 再帰関数(fn1)を渡す別の関数(fn2)のスコープにある変数を再帰関数(fn1)は参照する(キャッシュ等)
|
8
装飾
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -116,9 +116,10 @@
|
|
|
116
116
|
|
|
117
117
|
# 補足
|
|
118
118
|
|
|
119
|
-
質問に掲載しているサンプルコードは、表題のことを示す以外の意味はありません。
|
|
119
|
+
**質問に掲載しているサンプルコードは、表題のことを示す以外の意味はありません。**
|
|
120
|
+
|
|
120
121
|
そのため、「サンプルコードの場合であれば、再帰をつかなくてもこう出来る、高階関数使わなくてもこう出来る」のような話ではなく、
|
|
121
|
-
以下
|
|
122
|
+
以下の条件を前提とした質問となります。
|
|
122
123
|
|
|
123
124
|
- 再帰処理が行われる
|
|
124
125
|
- その再帰関数(fn1)を別の関数(fn2)の引数に渡して実行する
|
7
前提の追加
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -112,4 +112,14 @@
|
|
|
112
112
|
そのため、最初に載せた高階関数のコードにたどり着いたのですが、やはり、外のスコープの変数を参照しているということと、変数の巻き上げを使っているというところで、僕的には読みづらいと感じてしまいます。
|
|
113
113
|
特に実際のコードはこれよりも長い為。
|
|
114
114
|
|
|
115
|
-
こういう場合は、何か出来る対策はあるのでしょうか?
|
|
115
|
+
こういう場合は、何か出来る対策はあるのでしょうか?
|
|
116
|
+
|
|
117
|
+
# 補足
|
|
118
|
+
|
|
119
|
+
質問に掲載しているサンプルコードは、表題のことを示す以外の意味はありません。
|
|
120
|
+
そのため、「サンプルコードの場合であれば、再帰をつかなくてもこう出来る、高階関数使わなくてもこう出来る」のような話ではなく、
|
|
121
|
+
以下が前提となる話となります。
|
|
122
|
+
|
|
123
|
+
- 再帰処理が行われる
|
|
124
|
+
- その再帰関数(fn1)を別の関数(fn2)の引数に渡して実行する
|
|
125
|
+
- 再帰関数(fn1)は別の関数(fn2)のスコープにある変数を参照する(キャッシュ等)
|
6
const
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
```ここに言語を入力
|
|
36
36
|
function hof(fn) {
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
const hr = '-----'
|
|
39
39
|
|
|
40
40
|
return function inner() {
|
|
41
41
|
|
|
42
42
|
console.log(hr);
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
const args = Array.prototype.slice.apply(arguments);
|
|
45
45
|
|
|
46
46
|
fn.apply(this, args);
|
|
47
47
|
}
|
5
書式の改善
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -103,7 +103,8 @@
|
|
|
103
103
|
#
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
こちらの方が読み手にとって直感的で分かりやすいと思うのですが、
|
|
106
|
+
こちらの方が読み手にとって直感的で分かりやすいと思うのですが、、、
|
|
107
|
+
|
|
107
108
|
**出力される結果は期待通りのものにはなりません。**
|
|
108
109
|
|
|
109
110
|
原因はコード内のコメントに記した通りです。
|
4
書式の改善
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
質問用に用意した簡易的なコードのため、機能としては意味がないですが、
|
|
77
77
|
単純に区切り線を追加する高階関数です。
|
|
78
78
|
|
|
79
|
-
このコード自体は期待した動作をします。
|
|
79
|
+
**このコード自体は期待した動作をします。**
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
|
|
@@ -104,7 +104,8 @@
|
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
こちらの方が読み手にとって直感的で分かりやすいと思うのですが、
|
|
107
|
-
出力される結果は期待通りのものにはなりません。
|
|
107
|
+
**出力される結果は期待通りのものにはなりません。**
|
|
108
|
+
|
|
108
109
|
原因はコード内のコメントに記した通りです。
|
|
109
110
|
|
|
110
111
|
そのため、最初に載せた高階関数のコードにたどり着いたのですが、やはり、外のスコープの変数を参照しているということと、変数の巻き上げを使っているというところで、僕的には読みづらいと感じてしまいます。
|
3
修正
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -110,4 +110,4 @@
|
|
|
110
110
|
そのため、最初に載せた高階関数のコードにたどり着いたのですが、やはり、外のスコープの変数を参照しているということと、変数の巻き上げを使っているというところで、僕的には読みづらいと感じてしまいます。
|
|
111
111
|
特に実際のコードはこれよりも長い為。
|
|
112
112
|
|
|
113
|
-
こういう場合は、何か
|
|
113
|
+
こういう場合は、何か出来る対策はあるのでしょうか?
|
2
極力
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
言葉での説明が上手く出来そうにないので、質問用に用意した簡易的なコードで説明をいたします。
|
|
7
7
|
|
|
8
|
+
※極力、ES6を使わずに書きました。
|
|
9
|
+
|
|
8
10
|
# 高階関数に渡す関数
|
|
9
11
|
|
|
10
12
|
```
|
|
@@ -71,8 +73,6 @@
|
|
|
71
73
|
-----
|
|
72
74
|
```
|
|
73
75
|
|
|
74
|
-
※ES6を使わずに書きました。
|
|
75
|
-
|
|
76
76
|
質問用に用意した簡易的なコードのため、機能としては意味がないですが、
|
|
77
77
|
単純に区切り線を追加する高階関数です。
|
|
78
78
|
|
1
補足
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -108,5 +108,6 @@
|
|
|
108
108
|
原因はコード内のコメントに記した通りです。
|
|
109
109
|
|
|
110
110
|
そのため、最初に載せた高階関数のコードにたどり着いたのですが、やはり、外のスコープの変数を参照しているということと、変数の巻き上げを使っているというところで、僕的には読みづらいと感じてしまいます。
|
|
111
|
+
特に実際のコードはこれよりも長い為。
|
|
111
112
|
|
|
112
113
|
こういう場合は、何か可読性をあげるために対策はあるのでしょうか?
|