ユーザ定義関数
関数
- 関数
-
特定のコードの流れ(文脈)に依存せず、複数の文脈で使い回せる一連の処理をパッケージングしたものが関数である。
関数は外から呼び出されると、処理を実行し、必要があれば戻り値を呼び出し元に戻す。
- 関数の構成要素
-
function 関数名(仮引数1, 仮引数2…){ 処理の中身; [return 戻り値;] }
- 戻り値の受取
- 変数 = 関数(引数…);
<script> function add_num(num1, num2){ const add = num1 + num2; return add; } const num = add_num(2,4); document.write(num); </script>
変数のスコープ
- スコープとは
-
変数の「寿命」には限界がある。変数は自分が「生まれた」関数を超えては生きられない。
関数の処理内容を記述する{}の中ではじめて定義された変数を「ローカル変数」と呼ぶ。
関数の「引数」はローカル変数とは呼ばないが、ローカル変数と同じ扱いがされる({}の中で定義されたものとして扱われ、関数を超えては生きられない)。
- グローバル変数
-
関数の外で定義された変数は「グローバル変数」である。
関数内部で変数宣言varを付けずに変数を定義するとその変数も「グローバル変数」となる。
グローバル変数は{}の限界を超えて生き続けることができる。
関数の呼び出し
- 関数を利用する(呼び出す)
-
関数に実引数を代入すると関数で定義された処理が具体的に実行され、戻り値があればそれを値として利用できる(別の変数に代入、そのままdocument.write()など)。
値渡しと参照渡し
- 値渡し
-
※func関数のローカル変数var1は5になるが、func関数の実引数として渡されたvar1の値は変化しない。実引数として渡されたのはvar1の中身(値)であって、変数そのものではない(「値渡し」)。
※変数そのものを渡す渡し方を「参照渡し」と呼ぶ。
- 参照渡し
-
※JavaScriptにおいては「オブジェクト」は「参照渡し」となる。
※参照渡しされた変数は関数内部での変更が関数外部にも及ぶ。
関数利用の一般的留意点
- グローバル変数・参照渡し
-
関数は特定の文脈から切り離されているが故に利用価値が高まる。しかしグローバル変数や参照渡しを用いるとその独立性が失われる。
従って関数を利用するに当たってはグローバル変数や参照渡しは極力使用しないのが望ましい。