引数のデフォルト値に関数 — function f(x = Date.now()) {}
JavaScript では 引数のデフォルト値に「関数の呼び出し結果」を指定できます。
初心者は「引数が渡されなかったときに、その場で関数を呼んで値を決める」と覚えると理解しやすいです。
基本のコード例
function f(x = Date.now()) {
console.log("x:", x);
}
f(); // → 現在のタイムスタンプ(ミリ秒)
f(12345); // → 12345 (渡した値が優先される)
JavaScriptDate.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生成」で練習すると理解が深まる。
これを覚えれば「便利な初期値を自動で設定する関数」を作れるようになります。
