# javaScript 基礎編2(学習日 9/11)(関数と宣言、式と文、条件分岐、ループと反復処理)
## 1. 関数と宣言
a. 関数の書き方の基本
関数はfunctionを用いる。
(例)2日間の野球の入場者数(spectator)が、4万人、4万5千人の時の合計入場者数
```javascript=
function plus(a,b){
total=a+b
return total;
};
const spectator = plus(40000, 45000);
console.log(spectator);
```
b. 様々な関数
* function double(数値)
入力数値の2倍を返す。
* return(返り値)無し
undefinedを返す。
* 引数が関数で定義された数より少ない・多い
引数がある分までは通常処理を続け、余った仮引数にはundefinedが入る。
逆に多い場合は、多すぎる分はカット(無視)される。
Javaの場合、型の不一致でいずれもコンパイルエラーを起こす。
* デフォルト引数<ES2015以降対応>
関数側にデフォルト引数を設定しておき、呼び出された際に引数が無い場合、デフォルト引数で処理を行う。
* 可変長引数
引数の数の制限なく受け取れる関数。Math.max(...args)等。
c. 関数の扱い
関数は関数オブジェクトとして扱われる。また、同じ関数宣言は上書きされる。
* 関数を呼び出す場合
関数名()で呼び出す。
* 関数をオブジェクトとして参照する場合
関数名だけで呼び出す(かっこ無し)
関数を値として扱うことができる。(ファーストファンクション)
```javascript=
function fn() {
console.log("fnが呼び出されました");
}
// 関数`fn`を`myFunc`変数に代入している
const myFunc = fn;
myFunc();
```
d.関数式
関数を値として代入可能である。
```javascript=
const func = function() {
return "functionが呼び出されました";
};
```
一方で、Arrow Function型という、矢印のように表す書き方もある。
```javascript=
const aikatsu = (aikatsu,stars,friends,onparade) =>{
return aikatsu+stars+friends+onparade
};
```
e.コールバック関数
コールバック関数は、関数処理内での関数呼び出しが可能である。
コールバック関数を引数として用いる関数を高階関数という。
f.メソッド
オブジェクトのプロパティとしての関数のこと。
## 2. 式と文
* 式 実行することで結果となる値(評価値)を生み出し、評価値を変数に代入できるもの。
(例) 数式、関数式
* 文 処理の区切り。文末にセミコロンをつける。
(例) if文、for文
* 式文 式と文が一つになったもの。
* ブロック文 {}で囲んだ文。複数の文を中に記述できる。ブロック文の文末はセミコロン不要である(但し、変数を代入する式の場合は必要。)。
※ブロック文の中に書いた変数宣言は、ブロック文の中のみ有効である。(ブロックスコープ Javaでいうローカル変数のようなもの)
## 3. 条件分岐・ループ・反復処理
基本的にJavaの扱いと同じ。
但し、true,falseの判定は、JavaScriptの判定ルールに基づく。(基礎編1 2.6参照)
以下、確認しておきたい処理のみ取り上げる。
a. switch文
条件分岐パターンが複数ある文。
(例)
```javascript=
switch (式) {
case ラベル1:
// `式`の評価結果が`ラベル1`と一致する場合に実行する文
break;
case ラベル2:
// `式`の評価結果が`ラベル2`と一致する場合に実行する文
break;
default:
// どのcaseにも該当しない場合の処理
break;
}
// break; 後はここから実行される
```
b.for eachメソッド
配列の要素ごとに反復処理を行うメソッド。
コールバック関数を利用する。
```javascript=
const array = [1,2,3];
array.forEach(value =>{
console.log(value);
});
```
c. someメソッド
配列の要素をテストするメソッド。
配列内で一つでも要素を満たせばその時点で反復処理を終了しtrueを返す。
```javascript=
function isEven(num) {
return num % 2 === 0;
}
const array = [1,2,3];
const evenCheck = array.some(isEven);
console.log(evenCheck);
```
d. breakとcontinue
* break文
繰り返しの脱出に用いる。
* continue文
ループ処理を途中で打ち切り、ループの先頭に戻る際に用いる。
e.特殊なfor文
* for in文
オブジェクトのプロパティを列挙するfor文
* for of文<ES2015以降対応>
配列などの内容を繰り返すfor文。Javaで言う拡張for文
```javascript=
const array = [1,2,3];
for (const value of array){
console.log(value);
}
```
###### tags: `JavaScript`