作成日:2025/6/3,最終更新日:2025/6/3

JavaScript / TypeScriptの基本文法の拡張について

条件分岐・関数・スコープに関する解説

この記事では、条件分岐・関数・スコープとは何かについて詳しく解説します。


1. 条件分岐(if / switch)と三項演算子

解説: JavaScriptにおける条件分岐は、ある条件に応じて処理を変えるための基本的な構文です。
最もよく使われるのはif文ですが、複数の条件がある場合はelse ifswitch文も便利です。

ここでは、そんなif文を拡張して柔軟に使う方法について解説していきます。




if / else文の基本構文

elseを使うと、if文で複数の条件に対応できるようになります。
// if / elseの基本
const score = 85;

if (score >= 90) {                      // 通常のifの条件分岐
  console.log('とてもよくできました');
} else if (score >= 70) {               // else ifを使用した条件分岐の追加
  console.log('よくできました');
} else {                                // elseのみを使用した上記の条件に当てはまらない場合の処理
  console.log('がんばりましょう');
}

ポイント: 条件は上から評価され、最初に一致したものだけが実行されます。
elseはどの条件にも当てはまらない場合の「最終手段」として使います。


switch文の構文と使い方

特定の値での条件分岐において、便利なのがswitch文です。
// switch文の例
const fruit = 'りんご';

switch (fruit) {
  case 'りんご':
    console.log('赤くて甘い果物です');
    break;
  case 'みかん':
    console.log('冬に人気の柑橘類です');
    break;
  case 'ぶどう':
    console.log('房になっている果物です');
    break;
  default:
    console.log('知らない果物です');
}

ポイント:switch文は、値が「完全一致」した場合にだけ該当ブロックが実行されます。
caseの末尾にbreakを入れないと、次のブロックまで処理が流れる(フォールスルー)点に注意しましょう。


三項条件演算子(条件演算子)

短い条件分岐なら、三項演算子でif文よりもシンプルに記載することができます。
// 三項演算子を使った例
const age = 20;
const result = (age >= 18? '大人' : '未成年');
console.log(result); // 結果 : 大人

ポイント: 三項演算子は、1行で書けるシンプルな条件分岐に向いています。
短い条件分岐で読みやすさを優先する場合は参考条件演算子、複雑な処理にはif文を使うのがおすすめです。


2. 関数の基本と使い方

解説: 関数とは、複数の処理をひとまとめにして、繰り返し使えるようにするための仕組みです。
JavaScriptでは、functionキーワードを使って関数を定義できます。
また、近年はアロー関数もよく使われています。




関数の基本構文

まずは基本のfunction構文を使った関数の定義と実行方法です。

// 通常の関数定義と呼び出し
function greet(name) {
  return 'こんにちは、' + name + 'さん';
}

const message = greet('太郎');
console.log(message); // 結果 : こんにちは、太郎さん

ポイント: 関数は「定義 → 呼び出し」という流れで使います。
returnで戻した値は、変数に代入して再利用できます。


アロー関数の書き方

functionの代わりに、矢印(=>)を使って書くのがアロー関数です。

// アロー関数で同じ処理を書く
const greet = (name) => {
  return 'こんにちは、' + name + 'さん';
};

console.log(greet('花子')); // 結果 : こんにちは、花子さん

ポイント: アロー関数は、短く書けて見やすくなる場面に便利です。
処理が1行ならreturnも省略できます。


引数と戻り値の基本

関数には引数(パラメータ)を渡すことができ、処理の結果を戻り値として返すこともできます。

// 複数の引数と戻り値の例
function add(a, b) {
  return a + b;
}

console.log(add(3, 5)); // 結果 : 8

ポイント: 戻り値が必要ない場合は、return文を省略しても構いません。
関数は、共通の処理を何度も呼び出せる「再利用可能な部品」として使います。


3. スコープとクロージャ

解説: スコープとは、「変数が有効に使える範囲」のことです。
JavaScriptでは、関数ごと{ } ブロックごとにスコープが発生します。
また、スコープに関連して「クロージャ」という重要な概念も登場します。




var / let / constのスコープの違い

varは関数スコープ、let/constはブロックスコープです。

// スコープの違い
function example() {
  if (true) {
    var a = 'varの変数';
    let b = 'letの変数';
    const c = 'constの変数';
  }

  console.log(a); // 結果 : varの変数
  console.log(b); // エラー(スコープ外)
  console.log(c); // エラー(スコープ外)
}

ポイント: letとconstは、定義されたブロックの中だけで使えます。
予期せぬバグを防ぐためにも、原則はlet/constを使うのが現代的な書き方です。


クロージャとは?

クロージャとは、「関数の外で定義された変数を覚えている関数」のことです。
たとえば、ある関数がメモを引き出しにしまって、それを別の関数があとで読み返すようなイメージです。

outer()
  └── let count = 0
  └── function inner()
        └── count を参照(← outerの変数)

→ inner は outer の変数(count)を「覚えている」ので、outer が終わったあとでも使える
実施に使った例はこちら↓
// クロージャの例
function outer() {
  let count = 0;

  function inner() {
    count++;
    console.log(count);
  }

  return inner;
}

const counter = outer();
counter(); // 結果 : 1
counter(); // 結果 : 2

ポイント: inner関数は、outer関数の中にあったcount変数をずっと覚えています
outerはもう実行を終えているのに、そのスコープ内の変数を使い続けられるのがクロージャの特徴です。
これは「状態を保存しながら何度も使える関数」が必要なときに便利です。

このように、「関数の実行が終わっても変数を保持し続けられる」のがクロージャの最大の特徴です。