回答編集履歴
2
ES2015版を作成
test
CHANGED
@@ -44,15 +44,9 @@
|
|
44
44
|
|
45
45
|
console.log(calcSum(1, 2)); // 3
|
46
46
|
|
47
|
-
```
|
48
47
|
|
49
48
|
|
50
|
-
|
51
|
-
ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
|
49
|
+
// ES2015という新しい書き方では、引数の初期値が宣言出来るようになりました。
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
```JavaScript
|
56
50
|
|
57
51
|
function calcSum(a = 0, b = 0, c = 0) {
|
58
52
|
|
@@ -104,14 +98,6 @@
|
|
104
98
|
|
105
99
|
|
106
100
|
|
107
|
-
---
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
おまけのおまけ: calcSumを完成させる
|
112
|
-
|
113
|
-
|
114
|
-
|
115
101
|
argumentsと配列操作を使ってかっこよく仕上げます。
|
116
102
|
|
117
103
|
自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
|
@@ -145,3 +131,49 @@
|
|
145
131
|
console.log(calcSum(1, 2, 3, 4)); // 10
|
146
132
|
|
147
133
|
```
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
---
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
おまけのおまけ!: ES2015をフルに使った場合
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
> maisumakun:
|
146
|
+
|
147
|
+
> babelやNode前提の環境では、(同種の引数を任意個受ける、という状況なら)最後のようにspread引数として宣言しておくのがわかりやすい気もします。
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
JSも幾つかバージョンがあり、ES2015という新バージョンでは更に強化した記述が可能になりました。
|
152
|
+
|
153
|
+
アロー演算子、spread、reduceをフル活用すれば質問文の例題を1行で書けてしまいます。
|
154
|
+
|
155
|
+
残念ながらIE11では対応していませんが、他のモダンブラウザ全てとNode.jsでは扱えますので調べてみてください。
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
IE11に対応する場合、Babelという古いJSのバージョンに戻すソフトを使えば大体動作します。
|
160
|
+
|
161
|
+
自動化ツールを組んで、書いたコードをデプロイ前にBabelを通して反映するということが可能です。
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
```JavaScript
|
166
|
+
|
167
|
+
const calcSum = (...nums) => nums.reduce((a, b) => a + b, 0)
|
168
|
+
|
169
|
+
console.log(calcSum()); // 0
|
170
|
+
|
171
|
+
console.log(calcSum(1)); // 1
|
172
|
+
|
173
|
+
console.log(calcSum(1, 2)); // 3
|
174
|
+
|
175
|
+
console.log(calcSum(1, 2, 3)); // 6
|
176
|
+
|
177
|
+
console.log(calcSum(1, 2, 3, 4)); // 10
|
178
|
+
|
179
|
+
```
|
1
おまけのおまけ追加
test
CHANGED
@@ -101,3 +101,47 @@
|
|
101
101
|
console.log(calcSum([1, 2, 3, 5, 5])); // 16
|
102
102
|
|
103
103
|
```
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
---
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
おまけのおまけ: calcSumを完成させる
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
argumentsと配列操作を使ってかっこよく仕上げます。
|
116
|
+
|
117
|
+
自動的に宣言されるargumentsは配列っぽい変数ですが、配列から継承して作られた存在ではなく、
|
118
|
+
|
119
|
+
リスト操作のメソッドを使おうとするとエラーが出ます。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
参考サイト: [[JavaScript] arguments をサクッと配列に変換する方法](http://phiary.me/javascript-arguments-to-array/)
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
```JavaScript
|
128
|
+
|
129
|
+
function calcSum() {
|
130
|
+
|
131
|
+
var args = Array.prototype.slice.call(arguments);
|
132
|
+
|
133
|
+
return args.reduce(function(a, b){ return a + b }, 0);
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
console.log(calcSum()); // 0
|
138
|
+
|
139
|
+
console.log(calcSum(1)); // 1
|
140
|
+
|
141
|
+
console.log(calcSum(1, 2)); // 3
|
142
|
+
|
143
|
+
console.log(calcSum(1, 2, 3)); // 6
|
144
|
+
|
145
|
+
console.log(calcSum(1, 2, 3, 4)); // 10
|
146
|
+
|
147
|
+
```
|