diff --git a/docs/1-trial-session/09-functions/index.md b/docs/1-trial-session/09-functions/index.md
index 64b33cc84..940d48f28 100644
--- a/docs/1-trial-session/09-functions/index.md
+++ b/docs/1-trial-session/09-functions/index.md
@@ -47,7 +47,7 @@ greet("morning", "佐藤");
## 戻り値
-
関数呼び出しは式の一種です。関数定義内で return 文を用いると、関数の実行が停止され、関数呼び出し式の評価結果が確定します。この値を戻り値と呼びます。ある値を戻り値として設定して関数の実行を終了することを、関数がその値を返すと表現します。
+関数呼び出しは式の一種です。関数定義内で return 文 を用いると、関数の実行が停止され、関数呼び出し式の評価結果が確定します。この値を戻り値と呼びます。ある値を戻り値として設定して関数の実行を終了することを、関数がその値を返すと表現します。
```javascript
function add(a, b) {
@@ -61,6 +61,22 @@ document.write(add(3, 4));
+:::tip **return文**が実行された時点で関数が終了するため、次のように書くことで [if ~ else 文](../07-if-statement/#if--else-if--else)や [|| (OR) 演算子](../06-boolean/#%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97%E5%AD%90)の繰り返しを避けつつ、複数の条件のついた処理を実行することができます。
+
+```javascript
+let age = 21;
+let hasDriverLicense = true;
+let isDrunk = true;
+function tryToDrive() {
+ // if文の実行する式が一行だけの場合、{}を省略できます。
+ if (age < 18) return;
+ if (hasDriverLicense === false) return;
+ if (isDrunk) return;
+ document.write("車を運転できます。");
+}
+```
+:::
+
## 変数のスコープ
関数内で宣言された変数は、関数内でのみ有効です。変数が有効な範囲のことを、その変数のスコープと呼んでいます。
@@ -102,23 +118,57 @@ increment();
:::
+## モジュール化
+
+複雑な操作を 関数 として モジュール化 して複数のブロックに分解することで、コードの可読性を上げることができます。
+```javascript
+// モジュール化前
+const stringToRepeat = "☆";
+for (let i = 0; i < 10; i++) {
+ let result = "";
+ for (let j = 0; j < i; j++) {
+ result += stringToRepeat;
+ }
+ document.write(result);
+ document.write("
");
+}
+```
+
+```javascript
+// モジュール化後
+function repeat(stringToRepeat, times) {
+ let result = "";
+ for (let j = 0; j < times; j++) {
+ result += stringToRepeat;
+ }
+ return result;
+}
+
+for (let i = 0; i < 10; i++) {
+ document.write(repeat("☆", i));
+ document.write("
");
+}
+```
+この例における`repeat()`関数は、第一引数の文字列を第二引数回だけ繰り返し足したものを返します。
+
## 演習
携帯電話料金を計算する関数を作ってみましょう。
```javascript
-function calculateCost(monthlyBandwidth) {
+function calculateCost(monthlyDataUse) {
// ここに処理を書く
}
document.write(calculateCost(3.5));
```
-`calculateCost` は、引数に月間転送量 `monthlyBandwidth` を取り、その月の携帯電話料金を戻り値として返す関数です。携帯電話料金は、下のルールで決定されるとします。
+`calculateCost` は、引数に月間転送量 `monthlyDataUse` を取り、その月の携帯電話料金を戻り値として返す関数です。携帯電話料金は、下のルールで決定されるとします。
+
-> 月間転送量を _monthlyBandwidth_ (GB) とします。
->
-> - _monthlyBandwidth_ < 5.0 のとき、携帯電話料金は _monthlyBandwidth_ × 600 (円)
-> - _monthlyBandwidth_ >= 5.0 のとき、携帯電話料金は 3000 (円)
+>
+> - 月間転送量 < 5.0 (GB) のとき、携帯電話料金は 月間転送量 × 600 (円/GB)
+> - 月間転送量 >= 5.0 (GB) のとき、携帯電話料金は 3000 (円)
+>
diff --git a/src/components/Term/definitions.js b/src/components/Term/definitions.js
index ba179832d..e318a7a75 100644
--- a/src/components/Term/definitions.js
+++ b/src/components/Term/definitions.js
@@ -256,6 +256,11 @@ export default {
definition: "変数が有効な範囲",
referencePage: "/docs/trial-session/functions/",
},
+ javascriptModularization: {
+ name: "モジュール化",
+ definition: "ひとまとまりの複雑なものや操作を一つにまとめること。",
+ referencePage: "/docs/trial-session/functions/index.md/#モジュール化",
+ },
javascriptObject: {
name: "オブジェクト (JavaScript)",
definition: