7.8Functions / Default Side Effects

デフォルト引数の副作用

デフォルト引数での副作用は避けてください。コードの理解が困難になります。

デフォルト引数の式は、関数が呼び出されるたびに評価されます。この式が外部の変数を変更するような副作用を持つ場合、関数の呼び出しがグローバルな状態に影響を与え、予測が困難でデバッグしにくいコードになります。関数は可能な限り純粋であるべきです。

❌ Bad
let b = 1;
// bad
function count(a = b++) {
  console.log(a);
}
count();  // 1
count();  // 2
count(3); // 3
count();  // 3
✅ Good
let b = 1;
// good
function count(a) {
  const val = a === undefined ? b++ : a;
  console.log(val);
}