JavaScript 逆引き集 | 引数のデフォルト値に関数

JavaScript JavaScript
スポンサーリンク

引数のデフォルト値に関数 — function f(x = Date.now()) {}

JavaScript では 引数のデフォルト値に「関数の呼び出し結果」を指定できます。
初心者は「引数が渡されなかったときに、その場で関数を呼んで値を決める」と覚えると理解しやすいです。


基本のコード例

function f(x = Date.now()) {
  console.log("x:", x);
}

f();           // → 現在のタイムスタンプ(ミリ秒)
f(12345);      // → 12345 (渡した値が優先される)
JavaScript
  • Date.now() は「現在時刻のミリ秒」を返す関数。
  • 引数を省略すると、その場で Date.now() が呼ばれて値が入る。

よく使うテンプレート集

現在時刻をデフォルトにする

function logTime(time = new Date()) {
  console.log("ログ時刻:", time.toISOString());
}

logTime();                // 現在時刻
logTime(new Date("2025-01-01")); // 指定した時刻
JavaScript

乱数をデフォルトにする

function randomValue(x = Math.random()) {
  console.log("値:", x);
}

randomValue();   // 0〜1の乱数
randomValue(0.5); // 指定した値
JavaScript

ユニークIDをデフォルトにする

function createUser(id = crypto.randomUUID()) {
  console.log("ユーザーID:", id);
}

createUser(); // ランダムなUUID
createUser("fixed-id"); // 指定したID
JavaScript

例題: デフォルトで現在時刻を記録するログ関数

function logMessage(msg, time = new Date().toLocaleString()) {
  console.log(`[${time}] ${msg}`);
}

logMessage("アプリ起動");
// → "[2025/12/12 12:08:00] アプリ起動"

logMessage("テスト", "2025/01/01 00:00:00");
// → "[2025/01/01 00:00:00] テスト"
JavaScript
  • 効果: 引数を省略すると「今の時刻」が自動で入る。

実務でのコツ

  • 関数呼び出しは毎回実行される: Date.now()Math.random() は関数が呼ばれるたびに新しい値になる。
  • 重い処理は避ける: デフォルト値に重い関数を置くと、呼び出しのたびに負荷がかかる。
  • 柔軟な初期化: デフォルト値に関数を使うと「省略したときの便利な初期値」を作れる。

ありがちなハマりポイントと対策

  • null を渡すとデフォルトは効かない: f(null); // → null f(undefined); // → Date.now() が使われる → デフォルトは「未指定(undefined)」のときだけ適用される。
  • 毎回違う値になる:
    • Date.now()Math.random() は呼ぶたびに変わる。
    • 「固定値」を使いたいなら関数外で定義して渡す。

練習問題(デフォルトで乱数を使う関数)

function pickNumber(x = Math.floor(Math.random() * 10)) {
  console.log("選ばれた数:", x);
}

pickNumber();   // 0〜9のランダムな数
pickNumber(7);  // 指定した数
JavaScript

直感的な指針

  • デフォルト値に関数を置くと「未指定ならその場で関数を呼ぶ」仕組みになる。
  • undefined のときだけデフォルトが効く。
  • 乱数や現在時刻など「毎回変わる値」を初期値にできる。
  • 初心者は「時刻ログ」「乱数」「UUID生成」で練習すると理解が深まる。

これを覚えれば「便利な初期値を自動で設定する関数」を作れるようになります。

タイトルとURLをコピーしました